【问题标题】:Filtering the object of a type with OfType in C#在 C# 中使用 OfType 过滤类型的对象
【发布时间】: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@,除了泛型根本不可用的上下文。

标签: c# linq oftype


【解决方案1】:

有两个问题:

  • OfType 返回 IEnumerable&lt;T&gt;,而不是 T
  • 这是一种方法 - 你忘了括号

也许你想要:

Base f = list.OfType<A>().FirstOrDefault();

?

【讨论】:

    【解决方案2】:

    括号?

    这是一个函数而不是运算符。

    Base f = list.OfType<A>()
    

    查看参考:

    Enumerable.OfType(Of TResult) Method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多