OfType <! - ???? - >的参数在C#方法中使用时

时间:2012-04-15 20:28:53

标签: c# linq oftype

我有这段代码将“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);
}

我在'????'中使用什么参数从原始代码获得相同的结果?

2 个答案:

答案 0 :(得分:4)

您似乎正在寻找一种通用的方法来根据Method的不同子类型执行Base中的操作。你可以用:

来做到这一点
public static Base Method<T>(IEnumerable<Base> b) where T: Base
{
    Base f = list.OfType<T>().FirstOrDefault();
    return f;
}

这将返回类型为b的{​​{1}}的第一个实例(必须是T的子项)。

答案 1 :(得分: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;
}

如果不是您要搜索的内容,请澄清。