【问题标题】:Remove item of List of parent class type through LINQ通过LINQ删除父类类型列表的项目
【发布时间】:2014-01-27 09:18:03
【问题描述】:

我有一个父类列表,其中包含由子类组成的对象项。例如

Class Vehicle
{
String Name;
}

Class Car: Vehicle
{
int Speed;
}

Class Bike: Vehicle
{
int Milage;
}

List<Vehicle> transports = new List<Vehicle>;
transports.Add(new Car{Name = "Fiat", Speed = 70});
transports.Add(new Bike{Name = "Bajaj", Milage = 70});
transports.Add(new Car{Name = "BMW", Speed = 100});

现在我想删除速度为 100 的汽车类型的项目。我该怎么做。最好通过linq

【问题讨论】:

    标签: c# linq list generics


    【解决方案1】:
    transports.RemoveAll(x => x is Car && (x as Car).Speed == 100);
    

    【讨论】:

    • 太棒了。正是我想要的。
    【解决方案2】:

    这是你想要的吗:

    var carsToRemove = transports.OfType<Car>().Where(c => c.Speed == 100).ToArray();
    
    foreach (var car in carsToRemove)
    {
        transports.Remove(car);
    }
    

    ?

    【讨论】:

    • 在一般情况下,在 for 循环中从 C# 列表中删除项目是一个坏主意,因为这是 O(N^2)。
    • @svinja:一般来说,当您需要快速搜索项目时,使用List&lt;T&gt; 是个坏主意。此外,如果您正在寻找微优化,那么当结果是可预测的(不能返回 null 值)时,使用 as 而不是强制转换是一个坏主意。
    • O(N^2) vs O(N) 不是“微”优化。
    【解决方案3】:

    试试这个代码: 您可以使用RemoveAll 删除项目

    transports.RemoveAll(c => c is Car && (c as Car).Speed == 100);
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 2010-12-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多