c# - 使用 Linq 仅从集合中选择子类

标签 c# linq inheritance optimization

下面的代码已经可以工作了,但我很想知道是否有更好的方法来做到这一点。简而言之,IEnumerable 包含类型 A 和 B(继承 A)的实例。我想从集合中仅选择类型 B 的实例并对它们的一个属性求和。

这是我已经拥有的代码,但我对是否可以用不同的方式完成 Linq 语句很感兴趣——如果我没记错的话,目前它将转换两次(一次在 Where 中,一次在 Select 中):

  void Main()
    {
        List<A> acol = new List<A>();

        acol.Add(new A{id = 1});
        acol.Add(new B{id = 2, name = "b", anotherID = 1});

        //Can the Where and Select be optimized/done in different way
        var onlyChildren = acol.Where(i => i is B).Select(c => c as B);
        onlyChildren.Dump();
        onlyChildren.Sum(c => c.anotherID).Dump();
    }

    class A
    {
        public int id {get;set;}
    }

    class B:A
    {
        public string name {get;set;}
        public int anotherID {get;set;}
    }

最佳答案

使用 OfType<T> :

var onlyChildren = acol.OfType<B>();

关于c# - 使用 Linq 仅从集合中选择子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019958/

相关文章:

c# - 无法在 MVVM 中完成模式中介

c# - 在 ASP.NET 4.5 中将 LINQ 与 MySql 结合使用

c# - 在 Linq 组中查找最大和最小 DateTime

c# - DapperExtensions MySQL INSERT 集 ID

c# - LINQ 加入列表列表

c# - GroupBy 复杂查询

c# - 组合多个 Where's 时如何格式化 linq 以用 OR 替换 AND

Java从对象到子类的转换

c++ - 采用指向基类的指针的函数是否也接受从基类私有(private)派生的子类?

c++ - 为模板参数中的每种类型声明和实现重载虚函数