ho scritto questo metodo di estensione (che compila):Flatten IEnumerable <IEnumerable <>>; comprensione generici
public static IEnumerable<J> Flatten<T, J>(this IEnumerable<T> @this)
where T : IEnumerable<J>
{
foreach (T t in @this)
foreach (J j in t)
yield return j;
}
Il codice sotto causa un errore di compilazione (nessun metodo adatto trovato), perché?:
IEnumerable<IEnumerable<int>> foo = new int[2][];
var bar = foo.Flatten();
Se a implementare l'estensione come qui di seguito, ottengo nessun errore di compilazione:
public static IEnumerable<J> Flatten<J>(this IEnumerable<IEnumerable<J>> @this)
{
foreach (IEnumerable<J> js in @this)
foreach (J j in js)
yield return j;
}
Edit (2): Questa domanda mi considero risposto, ma ha sollevato un'altra domanda per quanto riguarda risoluzione di sovraccarico e vincoli di tipo. Questa domanda che ho messo qui: Why aren't type constraints part of the method signature?
La tua modifica non funziona perché ne hai troppe enumerabili. 'foo.Flatten, int>();' dovrebbe funzionare. –
dlev