Mam dwa pytania:Wewnętrzne Realizacja AsEnumerable() w LINQ
Pytanie 1 Wstęp: zauważyłem, kiedy patrząc na realizację 'AsEnumerable()' metoda w LINQ firmy Microsoft, który był:
public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source)
{
return source;
}
Pytanie 1: spodziewałem się jakiś casting czy coś, ale to po prostu zwraca wartość nie została podjęta. Jak to działa ?
Pytanie 2/3 Tło: staram się zrozumieć kowariancji kontrawariancji i niezmienne. Myślę, że mam niejasne zrozumienie, że słowa kluczowe "w" i "na zewnątrz" określają zachowanie polimorficzne podczas przypisywania podtypu do typu macierzystego.
Pytanie 2: wiem z lektury, że IEnumerable jest kowariantna, a lista jest niezmienna, to dlaczego jest to niemożliwe:
List<char> content = "testString".AsEnumerable();
Pytanie 3:
Jeśli IList implementuje IEnumerable dlaczego to nie jest możliwe:
IEnumerable<char> content1 = "testString";
IList<char> content2 = content1;
Proszę mi pomóc zrozumieć, dziękuję w dvance.
AsEnumerable() wymusza zapytanie do natychmiastowego wykonania w innych dostawcach LINQ, takich jak LINQ do SQL lub Entity Framework. Jest prawdopodobnie dodany do LINQ do Objects dla kompletności. –