1

我正在使用 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

4 回答 4

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()))
于 2013-05-07T13:53:21.650 回答
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>());
于 2013-05-07T13:51:44.220 回答
-1

您可以为此目的使用动态:

foreach (dynamic uid in uids)
于 2013-05-07T13:49:46.393 回答
-1

var的使用发生了什么?

foreach (var uid in uids)

?? 还是我完全误解了这个问题?

于 2013-05-07T13:56:44.560 回答