0

我正在使用 .net 3.5 框架。下面是我的代码。

class Base {}

class Derived : Base {}

class Program {
  static Main() {
    IList<Base> base_col = new List<Base>();
    base_col.Add(new Derived()); // Do you think this line code is good?
  }
}

你认为泛型会是类型检查的好主意吗?

我会领先一步。

static Main() { 
  IList<Derived> base_col = new List<Derived>(); 
  Process(base_col); // error. 
} 
static Process(IEnumarable<Base> baseCollection) { } 

为什么代码在这里中断?

4

1 回答 1

1

由于Derived也是 a Base,所以显示的代码没有问题 - 它与泛型关系不大。

关于您的编辑:您提供的代码确实在IEnumerable<>接口是逆变的 .NET 4 中工作。之前的版本没有使用此功能(对于接口中的协变/逆变器的支持显然自 V2 以来已在 CLR 中,但直到 .NET Framework 的 V4 之前没有使用该功能的语言发出代码)。

对于这种特定情况,您可以Cast<>安全地使用 LINQ 函数:

static Main() { 
  IList<Derived> base_col = new List<Derived>(); 
  Process(base_col.Cast<Base>());
} 
于 2012-08-27T13:17:15.653 回答