为什么我不能使用的AddRange添加子类的项目?
-
21-08-2019 - |
题
我有两个类....包裹和FundParcel ......,我想一个IEnumerable转换亚型为IList父类型....
public class FundParcel : Parcel
{
/* properties defined here */
}
public class Parcel
{
/* properties defined here */
}
这些在另一个类中使用的方法,如下所示:
private IList<Parcel> ExtractParcels(IEnumerable<FundParcel> fundParcels)
{
var parcels = new List<Parcel>();
foreach (var fp in fundParcels)
parcels.Add(fp);
return parcels;
}
我不明白的是为什么foreach语句不能被简化为:
parcels.AddRange(fundParcels);
我基本上得到,说:“参数类型'System.Colection.Generic.IEnumerable<FundParcel>' is not assignable to parameter type 'System.Collections.Generic.IEnumerable<Parcel>'"
但是,如果是这样的话,那么我不明白为什么parcels.Add工程...
我觉得好像整个方法应该是可更换的与行:
return (List<Parcel>)fundParcels;
...或也许该方法可以被报废产品总数因为亚型应该是可取代的它们的超类型..
谁能解释这笔交易是如何处理的AddRange在这种情况下,为什么for循环可能有必要在这种情况下?
解决方案
这SO 意愿可能回答你的问题,也将指向你即将推出的C#4.0将支持合作/孔特拉方差在一定程度上引用。
其他提示
考虑以下代码:
void AddParcelToParcelList(List<Parcel> parcels) {
parcels.add(new Parcel());
}
List<FundParcel> fundParcels = new List<FundParcels>();
AddParcelToParcelList(fundParcels);
如果继承的类也从基类的容器继承,上面的代码将是有效的,并且产生其中继承的类的列表包含基类的对象的情况。容器
不隶属于 StackOverflow