0

フィルタリングされた結果として「A」を取得するためのこのコードがあります。

public static void RunSnippet()
{
    Base xbase = new Base(); 
    A a = new A(); 
    B b = new B();
    IEnumerable<Base> list = new List<Base>() { xbase, a, b };
    Base f = list.OfType<A>().FirstOrDefault();
    Console.WriteLine(f);
}

IEnumerable<Base> list = new List<Base>() {xbase, a, b};次のような関数から使用する必要があります。

public static Base Method(IEnumerable<Base> list, Base b (????)) // I'm not sure I need Base b parameter for this?
{
    Base f = list.OfType<????>().FirstOrDefault();
    return f;
}

public static void RunSnippet()
{
    Base xbase = new Base(); 
    A a = new A(); 
    B b = new B();
    IEnumerable<Base> list = new List<Base>() { xbase, a, b };
    //Base f = list.OfType<A>().FirstOrDefault();
    Base f = Method(list);
    Console.WriteLine(f);
}

'????'ではどのパラメータを使用しますか 元のコードから同じ結果を得るには?

4

2 に答える 2

5

Methodのさまざまな子タイプに基づいて、何が行われるかを実行する一般的な方法を探しているようですBase。あなたはそれを行うことができます:

public static Base Method<T>(IEnumerable<Base> b) where T: Base
{
    Base f = list.OfType<T>().FirstOrDefault();
    return f;
}

bこれにより、タイプT(の子である必要があります)の最初のインスタンスが返されますBase

于 2012-04-15T20:39:20.460 に答える
2

タイプについてクエリを実行する場合は、次のように試すことができます。

public static Base Method(IEnumerable<Base> list, Type typeToFind)
{
   Base f =  (from l in list  
       where l.GetType()== typeToFind 
               select l).FirstOrDefault();
   return f;
}

探しているものと異なる場合は、明確にしてください。

于 2012-04-15T20:39:28.900 に答える