我宣布了一个结构:
Public Structure MyStructure
Public name As String
Public dataType As String
Public address As String
End Structure
然后是一个链接列表:
Private MyList As New LinkedList(Of MyStructure)
在给定结构中元素值的情况下,在列表中查找元素的最佳方法是什么。例如,如果我想在列表中找到字段名称为“读数”的MyStruct实例,我该怎么办?有没有办法避免循环链表元素?
答案 0 :(得分:0)
使用类而不是结构可能会更好:
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”(或“读数”);在这里,我们只是不必为它编写代码。
如果无法找到该项, FirstOrDefault
将返回Nothing
。由于Structure是值类型,因此它不能是Nothing
(尽管它可以包含 Nothing
)。因此,行If item IsNot Nothing
会导致语法错误。
我认为使用Structure,您可以使用String.IsNullOrEmpty
来测试名称是否已填写,但我只会使用一个类。