1

タイプがわからないコレクションを取得するためにLinQ式を呼び出すためにいくつかの抽象メソッドを必要とするクラスを取得しました。

このようなもの :

abstract List<object> Find(IEnumerable<object> items, object objectToFind)

したがって、オーバーライドメソッドは、オブジェクトに対してLinQクエリを実行できるようにするために、オブジェクトのキャストを開始する必要があります。

そんな感じ :

List<StrongType> things = items.Cast<StrongType>().ToList();
var thingToFind = (StrongType) objectToFind;
// <- PERFORM LINQ HERE
return result.Cast<object>().ToList();

すべてが正常に機能していますが、抽象化されたクラスから別の子クラスを作成する必要がある場合、彼は大きな間違いを犯す可能性があります。

だから...コメントだけでなくコードを使ってテクニックを単純化するのに役立つアドバイスが必要なだけです。または、Visual Studioでオーバーライドされたクラスを事前入力するようにコードを設定できるかどうか(属性を使用して?)。

理解してもらいたいです(私の英語は少し貧弱です)

ありがとう ;)

4

1 に答える 1

3

抽象メソッドやクラス定義でジェネリックスを使用できないのはなぜですか?

abstract List<T> Find(IEnumerable<T> items, T objectToFind)

そして、クラスを次のように継承します

public class Foo : Bar<StrongType>
{
   public override List<StrongType> Find(IEnumerable<StrongType> items, StrongType objectToFind)
   {
       // perform LINQ here
       return result.ToList();
   }
}
于 2012-10-25T14:43:51.143 に答える