【问题标题】:How to find a specific item in a List(of T)?如何在 List(of T) 中查找特定项目?
【发布时间】:2014-07-18 01:27:58
【问题描述】:
Public Class B1
    Public G2 As New List(Of Person)
End Class
Public Class Person
    Public Property PerId As Integer
    Public Property FirstName As String
    Public Property LastName As String
End Class
Public Class All4One
    Public Property ID As Integer
    Public Property Dept As String

    Public Overrides Function ToString() As String
        Dim _pers As New Person
        _pers = G2.Item(??)
        Return _pers.FirstName & " " & _pers.LastName
    End Function
End Class

这是我挂断电话的地方。我想在 _pers.PerId = ID 的 G2 中找到索引(= 到 ??)。

感谢您的帮助。 格雷格V

【问题讨论】:

  • 可以使用.Find方法...

标签: vb.net visual-studio-2010


【解决方案1】:

这是您需要做的 - 使用 LINQ 扩展。您不必这样做,因为您可以根据需要手动迭代您的列表。 但我看不出您将使用什么来搜索它?而且您使用ToString() 完全错误- 只有班级人员应该有一个包含Return pers.FirstName & " " & pers.LastNameTostring。从技术上讲,可能如下:

Public Class All4One
    Private _perId as integer 'I added it to use for search as an example

    Public Property ID As Integer
    Public Property Dept As String

    'WARNING!!!! BAD DESIGN
    Public Overrides Function ToString() As String
        Dim pers As Person = G2.FirstOrDefault(function(p) p.PerId = _perId)
        If pers isNot Nothing Then            
           Return pers.FirstName & " " & pers.LastName
        Else
           'return whatever you want
           Return "No Person found"
        End If
    End Function
End Class

您需要添加一些内容来搜索人员。此外,如果您的合约只能在列表中找到一个唯一的 PersID,则可以使用 SingleOrDefault 而不是 FirstOrDefault 来减少一些毫秒。

【讨论】:

  • 如果您想在 List 以外的其他对象上调用 FirstOrDefault(),请使用它。如果您将来可能想在 List 以外的其他东西上调用它,请使用 FirstOrDefault()。当根据传递的谓词找到匹配项时,.Find 方法将停止。另一方面,LINQ 将遍历整个列表以寻找匹配项,并可能返回许多项目。请注意,它们都使用相同的逻辑来遍历列表。
  • 我会使用 SingleOrDefault 因为你说你只想要一个,你使用的那个可以返回很多......
  • @MrCoDeXeR 在某种程度上你是对的。但我们真的不知道是否会有重复。我相信,如果发现很多,SingleOrDefault 会出错。我更新了答案
猜你喜欢
  • 2011-11-30
  • 2023-03-11
  • 2022-01-02
  • 2012-04-08
  • 1970-01-01
  • 2010-09-19
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多