如果我有以下课程:
public class MyItems : List<MyItem>
{
..
}
public class MyItem : Item
{
..
}
我怎样才能将MyItems的实例强制转换为List<Item>
?我已经尝试过做一个明确的演员,我得到了一个例外。
答案 0 :(得分:8)
你不能,因为C#不支持通用方差(see here for discussion of terminology),即使它确实如此,也不会允许这种情况,因为如果你可以将MyItems转换为List<Item>
,你可以调用Add(someItemThatIsntAMyItem)
,这会违反类型安全(因为MyItems只能包含MyItem对象,而不是任意项)。
请参阅this question(或搜索SO以了解“c#generic variance”)以获取有关此问题的其他信息以及C#4中的未来更改(尽管这些不会影响您的具体情况)。
答案 1 :(得分:0)
我相信我看到的是4.0。还没有。
答案 2 :(得分:0)
public class MyList : IList<MyClass>
{
List<MyClass> _list;
//Implement all IList members like so
public int IndexOf(MyClass item)
{
return _list.IndexOf(item);
}
//Then help the type system a bit with these two static methods.
public static implicit operator List<MyClass> (MyList mylist)
{
return mylist._list;
}
public static implicit operator MyList (List<MyClass> list)
{
return new MyList() { _list = list;}
}