Ich habe zwei Fragen:interne Implementierung von AsEnumerable() in LINQ
Frage 1 Hintergrund: Ich habe bemerkt, wenn sie bei der Umsetzung von 'AsEnumerable()' Methode in LINQ von Microsoft sucht, das war:
public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source)
{
return source;
}
Frage 1: ich war eine Art Casting oder etwas hier erwartet, aber es gibt einfach den Wert, den es übergeben wurde. Wie funktioniert das ?
Frage 2/3 Hintergrund: Ich habe versucht, Covariance, Kontravarianz und Invariant zu verstehen. Ich denke, ich habe ein vages Verständnis, dass "in" - und "out" -Schlüsselwörter das polymorphe Verhalten bestimmen, wenn Sie einem Elterntyp einen Subtyp zuweisen.
Frage 2: Ich weiß aus der Lektüre, dass IEnumerable ist covariant und Liste ist unveränderlich, warum dann ist dies nicht möglich:
List<char> content = "testString".AsEnumerable();
Frage 3:
Wenn IList IEnumerable implementiert, warum dann ist das nicht möglich:
IEnumerable<char> content1 = "testString";
IList<char> content2 = content1;
Bitte helfen Sie mir zu verstehen, danke in einem Dvance.
AsEnumerable() zwingt die Abfrage, die sofort in anderen LINQ-Providern wie LINQ to SQL oder Entity Framework ausgeführt wird. Es wurde wahrscheinlich LINQ to Objects zur Vollständigkeit hinzugefügt. –