Açık bir aralık değişken türü belirttiğinizde , derleyici için bir çağrı ekler Cast<T>
. Yani bu:
bool result = (from Match m in matches
where m.Groups["name"].Value.Length > 128
select m).Any();
tam olarak eşdeğerdir:
bool result = matches.Cast<Match>()
.Where(m => m.Groups["name"].Value.Length > 128)
.Any();
şu şekilde de yazılabilir:
bool result = matches.Cast<Match>()
.Any(m => m.Groups["name"].Value.Length > 128);
Bu durumda Cast
çağrı gereklidir çünkü MatchCollection
sadece uygular ICollection
ve IEnumerable
değil IEnumerable<T>
. Hemen hemen tüm LINQ to Objects genişletme yöntemleri IEnumerable<T>
, dikkate değer istisnalar Cast
ve OfType
her ikisi de "zayıf" tiplenmiş bir koleksiyonu (örneğin MatchCollection
) jenerik haline dönüştürmek için kullanılır IEnumerable<T>
- bu da daha sonra LINQ işlemlerine izin verir.