【发布时间】:2010-05-20 08:50:01
【问题描述】:
以下代码无法编译(使用 VS2010),我不明白为什么。编译器应该能够推断出List<TestClass> 与IEnumerable<ITest> 是“兼容的”(抱歉没有更好的词),但不知何故它不兼容。我在这里错过了什么?
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
}
}
编译器给出两个错误:
'ConsoleApplication1.Program.Test(System.Collections.Generic.IEnumerable
)' 的最佳重载方法匹配有一些无效参数 参数 1:无法从 'System.Collections.Generic.List
' 转换为 'System.Collections.Generic.IEnumerable '
【问题讨论】:
标签: c# .net generics .net-4.0 covariance