Der folgende Code kann nicht kompiliert werden (mit VS2010) und ich sehe nicht warum. Der Compiler sollte in der Lage sein zu folgern, dass List<TestClass>
mit IEnumerable<ITest>
"kompatibel" ist (sorry für das Fehlen eines besseren Wortes), aber irgendwie tut es das nicht. Was fehlt mir hier?C# -Compiler erkennt nicht, dass eine Klasse eine Schnittstelle implementiert
interface ITest {
void Test();
}
class TestClass : ITest {
public void Test() {
}
}
class Program {
static void Test(IEnumerable<ITest> tests) {
foreach(var t in tests) {
Console.WriteLine(t);
}
}
static void Main(string[] args) {
var lst = new List<TestClass>();
Test(lst); // fails, why?
Test(lst.Select(t=>t as ITest)); //success
Test(lst.ToArray()); // success
}
}
Der Compiler gibt zwei Fehler:
Die beste überladene Methode Spiel für ‚ConsoleApplication1.Program.Test (System.Collections.Generic.IEnumerable < ConsoleApplication2 .ITest >) 'hat einige ungültige Argumente
Argument: kann nicht von 'System.Collections.Generic.List <ConsoleApplication2.TestClass>' auf 'System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>'