我有两个类.... Parcel 和 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 循环?