为什么我不能投 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 中收到以下错误(为了便于阅读而缩短):
Cannot convert type 'List' to 'List' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion
谢谢。
最佳答案
您可以使用 System.Linq 中的 Cast
和 ToList
扩展方法将其放在一行中。
代替
internal List<Obj> returnStuff()
{
return getSomeStuff() as List<Obj>;
}
这样做:
internal List<Obj> returnStuff()
{
return getSomeStuff().Cast<Obj>().ToList();
}
关于C# 将 List<ObjBase> 转换为 List<Obj>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1266014/