【发布时间】:2012-04-15 20:13:46
【问题描述】:
我有一个基类 Base,以及继承自它的 A/B 类。
public class Base
{
int x;
}
public class A : Base
{
int y;
}
public class B : Base
{
int z;
}
我尝试使用 OfType 过滤我需要的唯一对象,如下所示:
public static void RunSnippet()
{
Base xbase; A a; B b;
IEnumerable<Base> list = new List<Base>() {xbase, a, b};
Base f = list.OfType<A>; // I need to get only the object A
Console.WriteLine(f);
}
当我编译代码时,我得到了这个错误:
错误 CS0428:无法将方法组“OfType”转换为非委托类型“Base”。你有没有打算 调用方法?
代码有什么问题?
【问题讨论】:
-
这是一个方法,你忘了括号。 OfType().
-
尝试遍历您的列表并使用 typeof 检查每个类型。数组列表让你存储蚂蚁类型的对象。
-
@user1260028:如果他正确使用该方法,则 OP 的方法将正常工作。 绝对不需要开始使用非泛型集合(呃)。
-
只是一个建议。好点子。但是,如果处理得当,您会惊讶于泛型集合如何清理长代码。
-
@user1260028:嗯,我很高兴使用通用集合。您是建议使用 non-generic 集合 (
ArrayList) 的人...我不记得上次我发现ArrayList比使用 @ 更好的情况987654325@,除了泛型根本不可用的上下文。