在类型结构的链表中查找元素 (VB.NET)

Finding Element in a Linked List of Type Structure (VB.NET)

我已经声明了一个结构:

Public Structure MyStructure
    Public name As String
    Public dataType As String
    Public address As String
End Structure

然后是链表:

Private MyList As New LinkedList(Of MyStructure)

给定结构中元素的值,在列表中查找元素的最佳方法是什么。比如我想在列表中找到字段名称为"readings"的MyStruct实例,应该怎么做呢?有没有办法避免循环遍历链表元素?

您最好使用 class 而不是结构:

Public Class MyFoo
    Public Property name As String
    Public Property dataType As String
    Public Property address As String
End Class

这允许以下内容:

Dim lst As New LinkedList(Of MyFoo)

lst.AddFirst(New MyFoo With {.name = "Ziggy", .address = "here", .dataType = "foo"})
lst.AddFirst(New MyFoo With {.name = "Zoey", .address = "there", .dataType = "bar"})
lst.AddFirst(New MyFoo With {.name = "Curly", .address = "nowhere", .dataType = "any"})

Dim item = lst.FirstOrDefault(Function(x) x.name = "Ziggy")
If item IsNot Nothing Then
    ' do something
End If

确实没有办法避免循环 - 某些地方必须迭代集合才能找到 "Ziggy"(或 "readings");在这里,我们只是不需要为它编写代码。

如果找不到该项目,

FirstOrDefault 将 return Nothing。由于 Structure 是一种值类型,因此它永远不可能是 Nothing(尽管它可以 包含 Nothing)。结果,行 If item IsNot Nothing 导致语法错误。

我想对于结构,您可以使用 String.IsNullOrEmpty 来测试名称是否已填写,但我只会使用 class.