私は2つのクラス....小包とFundParcelを持っている...と私はスーパータイプののIListにサブタイプのIEnumerableを変換しようとしている....AddRangeを使用してサブクラス化アイテムを追加できないのはなぜですか?
public class FundParcel : Parcel
{
/* properties defined here */
}
public class Parcel
{
/* properties defined here */
}
これらを別のに使用されていますメソッド内のクラスを次のように
parcels.AddRange(fundParcels);
私は基本的に「のArgを言うエラーが出ます:foreachステートメントは、に削減することができない理由
private IList<Parcel> ExtractParcels(IEnumerable<FundParcel> fundParcels)
{
var parcels = new List<Parcel>();
foreach (var fp in fundParcels)
parcels.Add(fp);
return parcels;
}
を私は理解していないどのようなことですumentタイプ'System.Colection.Generic.IEnumerable<FundParcel>' is not assignable to parameter type 'System.Collections.Generic.IEnumerable<Parcel>'"
しかし、そのような場合parcels.Add作業の理由、私は理解していない...
私は全体の方法は、行と交換可能であるべきかのように感じる:
return (List<Parcel>)fundParcels;
...またはサブタイプはそのスーパータイプのために置換する必要がありますので、多分方法がalltogether廃棄することができます。..
誰もが、この場合に必要であるかもしれないものの契約は、この場合にAddRangeであり、なぜループのために説明することができます?
[なぜC#/ CLRがメソッドのオーバーライドのコ/コントラバリエーションをサポートしていないのですか?](http://stackoverflow.com/questions/837134/why-does-c-clr-not-support-method- override-co-contra-variance) – TheLethalCoder