声明不同类型foreach的变量

时间:2013-05-07 13:45:47

标签: c# foreach

我正在使用c#中的IMAP和POP3邮件,我遇到了一个奇怪的问题。 两种类型的uid(唯一ID)是不同的类型:因为IMAP是长变量而POP是字符串。 因此,除此之外,下载和保存邮件的功能是相同的。 我需要做一个foreach循环,但唯一改变的行是第一行:

foreach (long uid in uids) //for the imap
foreach (string uid in uids) //for the pop

我不能先声明uid,所以,有一种方法可以只复制这一行而不是整个函数吗?

4 个答案:

答案 0 :(得分:2)

根据您对如何使用它的陈述:

foreach (object uid in uids)
{
    string uidStr = uid.ToString();
    // use uidStr, e.g.
    string myPath = Path.Combine(@"C:\mail\", uidStr);

或者:

foreach (string uid in uids.Select(x => x.ToString()))

答案 1 :(得分:1)

只做

foreach (long uid in uids.OfType<long>())
foreach (string uid in uids.OfType<string>())

(但我没有足够的背景来提供更详细的答案。)

[编辑]

如果我正确理解你的意思,你可以像这样定义你的过程方法:

static void process(IEnumerable<string> uids)
{
    foreach (string uid in uids)
    {
        // ...
    }
}

然后像这样称呼它:

process(uids.OfType<int>().Select(uid => uid.ToString()));
process(uids.OfType<string>());

答案 2 :(得分:-1)

您可以将dynamic用于此目的:

foreach (dynamic uid in uids)

答案 3 :(得分:-1)

使用var ??

发生了什么
foreach (var uid in uids)

?? 或者我完全误解了这个问题?