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,发现生活更美好。。。