我有这段代码将“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);
}
我在'????'中使用什么参数从原始代码获得相同的结果?
答案 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;
}
如果不是您要搜索的内容,请澄清。