我为什么不能投出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>();
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我必须这样做:
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 …
Run Code Online (Sandbox Code Playgroud) 有人可以向我解释为什么在.NET 2.0中,如果我有一个接口,IPackable
以及一个实现该接口的类OrderItem
,当我有一个接受a的方法List<IPackable>
,传入一个列表List<OrderItem>
不起作用?
有谁知道我怎么能完成这个功能?
码:
public interface IPackable {
double Weight{ get; }
}
public class OrderItem : IPackable
public List<IShipMethod> GetForShipWeight(List<IPackable> packages) {
double totalWeight = 0;
foreach (IPackable package in packages) {
totalWeight += package.Weight;
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码不起作用.
List<OrderItem> orderItems = new List<OrderItem>();
List<IShipMethod> shipMethods = GetForShipWeight(orderItems);
Run Code Online (Sandbox Code Playgroud)