我正在使用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,所以,有一种方法可以只复制这一行而不是整个函数吗?
答案 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)
?? 或者我完全误解了这个问题?