小编des*_*tor的帖子

IEnumerable的C#泛型约束

public interface I {
}
public class A : I {
}
Run Code Online (Sandbox Code Playgroud)

编译器显式IEnumerable<A>IEnumerable<I>:

public void Test() {
    IEnumerable<A> a = new List<A>();
    new List<I>().AddRange(a);
}
Run Code Online (Sandbox Code Playgroud)

但是通过通用约束,我们得到:

public void Test<T>() where T : I {
    IEnumerable<T> t = new List<T>();
    new List<I>().AddRange(t);
}
                          ^^^
Argument 1: cannot convert from 'IEnumerable<T>' to 'IEnumerable<I>'
Run Code Online (Sandbox Code Playgroud)

但是,编译很好.

public void Test<T>(T t) where T : I {
    new List<I>().Add(t);
}
Run Code Online (Sandbox Code Playgroud)

因此问题是:这是一个正确的行为,还是一个错误?

c# generics

8
推荐指数
1
解决办法
1496
查看次数

标签 统计

c# ×1

generics ×1