【发布时间】:2010-11-18 22:57:59
【问题描述】:
为什么我不能将List<ObjBase> 转换为List<Obj>?为什么以下不起作用:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
return getSomeStuff() as List<Obj>;
}
private List<ObjBase> getSomeStuff()
{
return new List<ObjBase>();
}
}
相反,我必须这样做:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
List<ObjBase> returnedList = getSomeStuff();
List<Obj> listToReturn = new List<Obj>(returnedList.Count);
foreach (ObjBase currentBaseObject in returnedList)
{
listToReturn.Add(currentBaseObject as Obj);
}
return listToReturn;
}
private List<ObjBase> getSomeStuff()
{
return new List<ObjBase>();
}
}
我在 Visual Studio 2008 中收到以下错误(为便于阅读而缩短):
无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换将类型“列表”转换为“列表”
谢谢。
【问题讨论】:
-
-1:这里有很多问题,包括stackoverflow.com/questions/1263489/… 和下面答案中引用的问题
标签: c# generics inheritance list casting