.NET 4 ライブラリ (ここでは Mono で実行) にこの内部メソッドがある場合:
protected internal IEnumerable<KSComponent> GetComponentsByType(Type componentType)
{
return this.componentsDic [componentType];
}
そして、簡単に使用できるように汎用パラメーターで公開したいと思います。これは私がこれまでに行ったことであり、何が機能していますか:
public IEnumerable<TComponentType> GetComponentsByType<TComponentType>() where TComponentType : KSComponent
{
return this.GetComponentsByType (typeof(TComponentType)).Cast<TComponentType>();
}
ただし、.NET 4.0 ではこれも機能しないはずです。
public IEnumerable<TComponentType> GetComponentsByType<TComponentType>() where TComponentType : KSComponent
{
return (IEnumerable<TComponentType>)this.GetComponentsByType (typeof(TComponentType));
}
編集:
KSComponent
は基本クラスであり、TComponentType
(eg)KSMoveComponent
であり、サブクラスKSComponent
です。私が持っている状況は、上記のコードの元のクラスがKSComponent
特定のタイプのリストを保持しているということです。たとえば、次のようになります。
typeof(KSMoveComponent)
にマップしますList<KSComponent>()
。リストのすべての要素は、実際には型KSMoveComponent
です。したがって、拡張機能を使用する代わりに、これを直接List<KSComponent>
キャストしたいと思います。List<KSMoveComponent>
Linq.Cast()
質問に行き着きます: 私は車のリストを持っており、それらがすべてメルセデスであることを 100% 確信できます。では、なぜメルセデスのリストを取得できないのでしょうか? :-)