声明不同类型的变量foreach

本文关键字:变量 foreach 同类型 声明 | 更新日期: 2023-09-27 18:12:23

我在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,所以,有一种方法可以只复制这一行,而不是整个函数?

声明不同类型的变量foreach

基于你将如何使用它的声明:

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()))

只管做

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>());

您可以使用dynamic:

foreach (dynamic uid in uids)

var怎么了??

foreach (var uid in uids)

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