私には2つのクラスがあります...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>'"
しかし、そうだとすれば、なぜ小包を追加するのかわかりません...
メソッド全体を次の行に置き換える必要があるように感じます。
return (List<Parcel>)fundParcels;
...または、サブタイプはスーパータイプの代わりに使用できる必要があるため、メソッドを完全に破棄することもできます。
この場合のAddRangeとの取引と、この場合にforループが必要になる理由を誰かが説明できますか?