Ho due domande:implementazione interna di AsEnumerable() in LINQ
Domanda 1 Background: ho notato quando guardando la realizzazione di 'AsEnumerable()' metodo LINQ da Microsoft, che è stato:
public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source)
{
return source;
}
domanda 1: mi aspettavo un qualche tipo di fusione o qualcosa qui, ma restituisce semplicemente il valore è stato passato. Come funziona ?
Domanda 2/3 Contesto: Ho cercato di capire la covarianza, la contravarianza e l'invariante. Penso, ho una vaga comprensione che le parole chiave "in" e "out" determinano il comportamento polimorfico quando si assegna un sottotipo a un tipo genitore.
Domanda 2: so da letto che IEnumerable è covariante, e la lista è invariante allora perché è questo non è possibile:
List<char> content = "testString".AsEnumerable();
Domanda 3:
Se IList implementa IEnumerable allora perché non è possibile:
IEnumerable<char> content1 = "testString";
IList<char> content2 = content1;
Per favore aiutami a capire, grazie in un dvance.
AsEnumerable() costringe la query da eseguire immediatamente in altri provider LINQ come LINQ to SQL o Entity Framework. Probabilmente è stato aggiunto a LINQ to Objects per completezza. –