关于为什么var
在foreach
循环中选取object
类型有很多问题(123),但这一次不同。当我使用此代码片段循环访问X509Certificate2Collection
时,令我感到惊讶的是,var
实际上拾取了X509Certificate2
类型,而不是object
,尽管X509Certificate2Collection
仅实现非泛型IEnumerable
而不是IEnumerable<T>
!为什么var在X509Certificate2Collection循环中推断类型X509Certificate2而不是对象?
X509Certificate2Collection collection = new X509Certificate2Collection();
foreach (var cert in collection)
{
Console.WriteLine(cert.Subject);
}
你可以看到继承层次的msdn article,但它似乎并没有被实施IEnumerable<X509Certificate2>
。如果我使用LINQ的收集,我没有得到X509Certificate2
类型:
collection.Select(cert => cert.Subject); // Won't compile
那么编译器如何知道在var
情况下的实际类型?
你可能是对的。这可以解释它。谢谢! – 2013-03-23 01:01:35
修改了链接到文档 – 2013-03-23 01:08:14