關於爲什麼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