不明なオブジェクトをインターフェイスのジェネリックインターフェイスにキャストします(最初は明示的なジェネリックタイプのジェネリックコレクションタイプのタイプから)

マーティンブラウン

基本的に私はそれらのサンプルクラスを手に入れました:

public interface IHasParts<TCollectionType> : where TCollectionType : ICollection
{
  TCollectionType Parts { get; set; }
}

public class CarPart
{
  //...
}

public class Car : IHasParts<List<CarPart>>
{
  public List<CarPart> Parts { get; set; }
  //...
}

はい、ICollectionIHasPartsを実装するクラスはParts、いくつかのハードプログラムされた条件基づいて異なるリストタイプを必要とするためここの汎用インターフェイスを使用する必要があります。

今、私はieの未知のオブジェクトを取得し、CarそれをまだParts利用可能なプロパティを持っている最も高い親にキャストする必要があります。

Car c = new Car() {
  Parts = new List<CarPart>() {
    // ...
  }
};

object o = (object)c;

int partsCount = ((IHasParts<ICollection>)o).Parts.Count; // InvalidCastException

どうやってやるの?DotNetFiddle

GyörgyKőszeg

ICollection代わりにCarクラスを定義するList<CarPart>、次のように機能します。

public class Car : IHasParts<ICollection>
{
    public ICollection Parts { get; set; }
}

あなたはまだあなたのパーツを初期化することができます List<CarPart>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ