【问题标题】:Best practice to delete item from collection从集合中删除项目的最佳实践
【发布时间】:2018-10-18 10:56:30
【问题描述】:

我有这样的课

Public Class Car
    Public Property Brand As String
    Public Property Model As String
    Public Property Horsepower As Integer
End Class

并像这样从这个类中收集对象

Dim myCarCollection As List(Of Car) = New List(Of Car) From {
New Car() With {.Brand = "VW", .Model = "Golf", .Horsepower = "100"},
New Car() With {.Brand = "Mercedes", .Model = "C220", .Horsepower = "110"},
New Car() With {.Brand = "Porsche", .Model = "911", .Horsepower = "341"}}

现在例如我想删除品牌不是大众且马力低于 300 的所有汽车。这是“最好”的方法吗?我看到该集合有类似myCarCollection.Where 的东西,有人可以解释一下如何做到这一点吗?

编辑:我知道如何使用 for/foreach 来做到这一点,但我正在考虑一种更聪明的方法。

【问题讨论】:

  • 您真的想从集合中删除项目(从而减少列表的长度)还是获取除您提到的条件之外的汽车子集?
  • 我想从收藏中删除它们
  • 不要在数字周围加上引号。如果一个属性是Integer,那么你不应该给它一个String

标签: .net vb.net list collections ienumerable


【解决方案1】:

您可以使用 RemoveAll 删除不满足条件的汽车

myCarCollection.RemoveAll(Function(x) x.Brand <> "VW" AndAlso
                          x.Horsepower < 300)

感谢Option Strict set to Off,当您将汽车添加到集合中时,请不要使用 VB 编译器提供的自动转换。从长远来看,这个选项弊大于利。

【讨论】:

  • 马力已经是一个整数还是我错了?但是谢谢,完美的解决方案! :)
  • 哦,是的,抱歉,被您使用字符串的集合中的 Add 混淆了。
  • 但是如果我使用 OberservableCollection,没有 RemoveAll。有没有类似的解决方案?
  • 我的错误由添加!
  • 或者您可以使用 Where 扩展来获取要删除的项目的副本,遍历项目并调用 remove 传递项目
【解决方案2】:

你可以使用RemoveAll:

myCarCollection.RemoveAll(Function(c As Car) c.Brand <> "VW" AndAlso
                                             c.Horsepower < 300)

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 2010-09-17
    • 2016-11-12
    • 2010-09-06
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多