![]() |
1
1
co-和contravariance只能用于委托和接口声明,因此代码无法工作。但是,您可以使用强制转换扩展方法强制转换结果,并使代码工作:
这将强制转换列表中的每个元素,并创建一个新的ivalue元素列表。 你需要这个的原因,与类型安全有关。当然,在您的示例代码中,没有问题。但方法ListAllContactTypes声明为返回类型列表<ContactType>。如果您可以将其分配给list<ivalue>,则可以将任何ivalue放入-因此,如果其他代码希望列表显式包含contacttype,则该代码将中断。考虑这个例子:
如果进行了编译,您将能够执行以下操作:
但你仍需考虑原始参考文献,在此基础上应允许:
不能这样做,因为列表中的元素是dummyType。幸好编译器早早救了我们。 |
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
milczi · Swift通用无强制展开向下投射 6 年前 |
![]() |
bugs · Typescript-泛型类型扩展自身 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
![]() |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
![]() |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |