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

时间:2015-03-24 00:48:24

标签: vb.net data-structures linked-list find

我宣布了一个结构:

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实例,我该怎么办?有没有办法避免循环链表元素?

1 个答案:

答案 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来测试名称是否已填写,但我只会使用一个类。