ich auf diese Frage lief und ich bin nicht zu verstehen, was los ist:Warum wird ein Array als IEnumerable ignoriert, wenn die verzögerte Ausführung ignoriert wird? heute
enum Foo
{
Zero,
One,
Two
}
void Main()
{
IEnumerable<Foo> a = new Foo[]{ Foo.Zero, Foo.One, Foo.Two};
IEnumerable<Foo> b = a.ToList();
PrintGeneric(a.Cast<int>());
PrintGeneric(b.Cast<int>());
Print(a.Cast<int>());
Print(b.Cast<int>());
}
public static void PrintGeneric<T>(IEnumerable<T> values){
foreach(T value in values){
Console.WriteLine(value);
}
}
public static void Print(IEnumerable values){
foreach(object value in values){
Console.WriteLine(value);
}
}
Ausgang:
0
1
2
0
1
2
Zero
One
Two
0
1
2
Ich weiß Cast() passiver Ausführung führen wird, aber es sieht wie es in IEnumerable umgewandelt wird, führt dazu, dass die verzögerte Ausführung verloren geht, und nur dann, wenn die tatsächliche Implementierungssammlung ein Array ist.
Warum ist die Aufzählung der Werte in dem Print
Methode Ergebnis im enum
zu einem int
für die List<Foo>
Sammlung geworfen werden, aber nicht die Foo[]
?
Was ist die Ausgabe von Console.WriteLine (value.GetType(). Name) in PrintGeneric? – SimSimY
@SimSimY 'Int32'. Und es ist Int32 für den 'Print' wenn die' List .Cast () 'übergeben wird, aber' Foo' wenn der 'Foo []. Cast ()' vorbei ist. –
Daryl
Was muss das tun? mit verzögerter Ausführung? – Servy