在.NET Framework 4.0中键入差异

Use*_*rol 6 .net generics types covariance contravariance

IEnumerable<T>,IComparable<T>还有一些现在是类型变体.IList<T>,ICollection<T>还有很多其他的不是.为什么?

Meh*_*ari 11

.NET Framework 4.0引入了安全的 co/contra-variance.IList<T>ICollection<T>T两个输入和输出位置,同时IEnumerable<T>具有T 只在输出位置,并IComparable<T>具有T 唯一的输入位置.

假设IList<T>支持的类型方差:

static void FailingMethod(IList<object> list) {
    list[0] = 5;
}

static void Test() {
    var a = new List<string>();
    a[0] = "hello";
    FailingMethod(a); // if it was variant, this method call would be unsafe
}
Run Code Online (Sandbox Code Playgroud)