相关疑难解决方法(0)

C#将List <ObjBase>转换为List <Obj>

我为什么不能投出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)

c# generics inheritance casting list

26
推荐指数
3
解决办法
6万
查看次数

.NET Casting通用列表

有人可以向我解释为什么在.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)

.net c# generics casting

6
推荐指数
4
解决办法
3万
查看次数

标签 统计

c# ×2

casting ×2

generics ×2

.net ×1

inheritance ×1

list ×1