Lassen Sie uns die folgende Erweiterung Methode nehmen:verwirrt, warum diese C# Code kompiliert, während ähnlichen Code nicht
static class Extensions
{
public static bool In<T>(this T t, params T[] values)
{
return false;
}
}
Ich bin neugierig, warum diese Code kompiliert und ausgeführt:
var x = new Object();
IEnumerable<int> p = new List<int> { 1, 2, 3 };
var t2 = x.In(p);
Innerhalb In
, values
ist ein Object[]
, als ob die List<int>
im laufenden Betrieb in ein Array konvertiert wird. Für mich scheint es, dass params T[]
nicht IEnumerable<int>
entspricht, weshalb ich überrascht bin, dass dies sogar läuft.
nun dieser Code:
var x = 5;
IEnumerable<int> p = new List<int> { 1, 2, 3 };
var t2 = x.In(p);
Does nicht Lauf und gibt den Compiler-Fehler:
Error 2 Argument 2: cannot convert from 'System.Collections.Generic.IEnumerable' to 'int[]'
Dies ist, was ich von dem ersten erwarten würde tatsächlich. Kann mir jemand erklären, was hier vor sich geht? Vielen Dank!
Fragen Sie, warum der erste kompiliert oder warum der zweite nicht? – SLaks
@SLaks - Ich habe mich meistens gefragt, warum das * erste * * * kompiliert, aber deine Antwort hat es perfekt genagelt. –
Dann sollten Sie Ihren Titel ändern. :) – SLaks