Skip to main content
 首页 » 编程设计

c#之强类型集合隐式和显式强制转换

2024年02月23日28shanyou

public void Foo (IEnumerable<object> objects) 
{ 
} 
 
var strings = new List<string>{"first", "second", "third"}; 
Foo(strings); // Compilation Error. 
Foo(strings.Cast<object>()); // O.k. 
  1. 为什么第一次调用 Foo 没有编译通过?从对象派生的字符串。
  2. 如果我可以将列表转换为对象并编译它,为什么编译器不自己做呢?

请您参考如下方法:

第一个调用在 .NET 4.0 中编译。

在以前的版本中,泛型类型必须完全匹配。

我建议阅读 Eric Lippert 关于 variance 的博客文章(协变和逆变)。