Mã sau đây không biên dịch được (sử dụng VS2010) và tôi không thấy tại sao. Trình biên dịch sẽ có thể suy ra rằng List<TestClass>
là 'tương thích' (xin lỗi vì thiếu một từ tốt hơn) với IEnumerable<ITest>
, nhưng bằng cách nào đó nó không. Tôi đang thiếu gì ở đây?Trình biên dịch C# không nhận ra một lớp đang triển khai một giao diện
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
}
}
Trình biên dịch cho hai lỗi:
Các quá tải tốt nhất phù hợp với phương pháp cho 'ConsoleApplication1.Program.Test (System.Collections.Generic.IEnumerable < ConsoleApplication2 .ITest >) 'có một số đối số không hợp lệ
Đối số 1: không thể chuyển đổi từ 'System.Collections.Generic.List <ConsoleApplication2.TestClass>' thành 'System.Collections.Generic.IEnumerable <ConsoleApplication2.ITest>'