c#铸造问题

Jer*_*emy 2 c# casting

如果我有以下课程:

public class MyItems : List<MyItem>
{
..
}

public class MyItem : Item
{
..
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能将MyItems的实例转换回来List<Item>?我试过做一个显式的演员,我得到一个例外.

ito*_*son 8

你不能,因为C#不支持泛型方差(参见这里讨论术语),即使它确实如此,它也不会允许这种情况,因为如果你可以将MyItems转换为List<Item>,你可以调用Add(someItemThatIsntAMyItem),这会违反类型安全(因为MyItems只能包含MyItem对象,而不能包含任意项).

请参阅此问题(或搜索SO以获取"c#generic variance")以获取有关此问题的其他信息以及C#4中的未来更改(尽管这些不会影响您的具体情况).