明示的な範囲変数の型を指定すると、コンパイラはへの呼び出しを挿入しますCast<T>
。したがって、この:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
これは次とまったく同じです:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
これは次のように書くこともできます:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
この場合、Cast
はとMatchCollection
のみを実装ICollection
しIEnumerable
、は実装しないため、呼び出しが必要ですIEnumerable<T>
。ほぼすべてのLINQ to Objects拡張メソッドはIEnumerable<T>
、Cast
およびの注目すべき例外を除いて、をターゲットにしていますOfType
。どちらも、「弱く」型付けされたコレクション(などMatchCollection
)をジェネリックに変換するために使用されIEnumerable<T>
ます。これにより、さらにLINQ操作が可能になります。