0

なぜがループで型を取得するのかについて多くの質問 ( 1 2 3 ) がありますが、今回は違います。このコード スニペットを使用して をループすると、非ジェネリックのみを実装し、!varobjectforeachX509Certificate2CollectionvarX509Certificate2objectX509Certificate2CollectionIEnumerableIEnumerable<T>

X509Certificate2Collection collection = new X509Certificate2Collection();
foreach (var cert in collection)
{
    Console.WriteLine(cert.Subject);
}

msdnの記事で継承階層を確認できますが、実装していないようですIEnumerable<X509Certificate2>X509Certificate2コレクションで LINQ を使用すると、型を取得できません。

collection.Select(cert => cert.Subject); // Won't compile

では、コンパイラはどのようにして実際の型を認識しているのvarでしょうか?

4

1 に答える 1

3

X509Certificate2Collection.getEnumerator()タイプ のプロパティX509Certificate2Enumeratorを持つ を返します。CurrentX509Certificate2

つまり、c# は IEnumerable または IEnumerable<T> だけに依存しているわけではありません。そのCurrentプロパティを直接見ています。

http://msdn.microsoft.com/en-us/library/aa288257%28v=vs.71%29.aspx

于 2013-03-23T00:56:25.073 に答える