List<A>转型为List<B>

假设现在有两个类—— A 和 B ,其中 A 是 B 的子类。将 A(子类)的引用转换为 B(父类)的引用是很普通的事,在任何编程语言中都不存在问题。但是将 List<A>(子类的容器)转换成 List<B>(父类的容器)就不是那么简单的事情了,因为List<B>并不是 List<A> 的父类。

不过从 .NET 4.0起,我们已经可以在 C# 中写

这样的代码了。这是因为 .NET 4.0 支持 C# 的变体范型(variance for generic type parameters)特性。关于其具体信息可以在网上搜索 “C# 协变 逆变” 。协变的英文是 Covariance,逆变的英文是 Contravariance。

如果想在 Unity 中使用这个特性的话,就要将 Unity 用的 .NET 运行时改为4.0以上。方法是将 Project Setting -> Player -> Scripting Runtime Version 改成 Experimental (.NET 4.6 Equivalent)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注