声明不同类型的变量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 (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)
? ?还是我完全误解了这个问题?