C# Casting ReadOnly Collection<;derivedType>;只读集合<;基本类型>;
我想知道是否有人能给我指出正确的方向 如何从C# Casting ReadOnly Collection<;derivedType>;只读集合<;基本类型>;,c#,.net,generics,collections,C#,.net,Generics,Collections,我想知道是否有人能给我指出正确的方向 如何从ReadOnlyCollection转换为ReadOnlyCollection,而无需迭代或“更新”副本 我将.NET Framework 4.0与Linq一起使用 yourCollection.Cast<myBaseType>(); yourCollection.Cast(); 我不相信您可以,因为泛型参数t没有定义为out(正如已经指出的那样.net不支持类中的协方差和逆变) 您必须使用LINQ,例如readOnlyColl.Cas
ReadOnlyCollection
转换为ReadOnlyCollection
,而无需迭代或“更新”副本
我将.NET Framework 4.0与Linq一起使用
yourCollection.Cast<myBaseType>();
yourCollection.Cast();
我不相信您可以,因为泛型参数t没有定义为out
(正如已经指出的那样.net不支持类中的协方差和逆变)
您必须使用LINQ,例如
readOnlyColl.Cast()代码>,或循环。在内部,LINQ将使用循环/迭代来制作新副本。你不能。你必须将只读集合
投影到只读集合
我认为对于泛型类型,C中不允许协变和逆变泛型不支持这一点,它们是不变的
我认为只有C#4中的泛型委托对协变和逆变的支持有限。您不能这样做,因此您最好传递像IEnumerable
或ICollection
这样的接口,而不是像ReadOnlyCollection
这样的具体类
然后你可以按照其他人的建议:
collection.Cast<myBaseType>();
collection.Cast();
您可以在C#4中将ROC
隐式转换为IEnumerable
,但不能转换为ROC
这是不幸的;如果能够在不可变类型上进行协变转换,那就太好了 或者更一般地说.Net不支持类中的协方差/逆变。我认为在.Net 4中,这是受支持的?@thebowler yse for Delegate and Interface在C#4中,当类型参数是引用类型并且在类型参数声明中声明了法律差异时,泛型接口和委托上存在协方差和逆变。在这里,您给了我一种不同的方法。我改用IEnumerable,发现生活更美好。。。