如何从具有键值对和 VB.Net 的特定键中获取值?

How do I get the value from a specific Key with Key Value Pair and VB.Net?

Public _SecurityLevel As List(Of KeyValuePair(Of Integer, Integer))

Public Sub New()
    _SecurityLevel.Add(New KeyValuePair(Of Integer, Integer)(1, 0))
    _SecurityLevel.Add(New KeyValuePair(Of Integer, Integer)(2, 1))
    _SecurityLevel.Add(New KeyValuePair(Of Integer, Integer)(3, 2))
    _SecurityLevel.Add(New KeyValuePair(Of Integer, Integer)(4, 3))
    _SecurityLevel.Add(New KeyValuePair(Of Integer, Integer)(5, 4))
    _SecurityLevel.Add(New KeyValuePair(Of Integer, Integer)(6, 5))
End Sub

我想在指定 Key (4) 时得到值 (3)。

在找到之前,我不想遍历整个 KVP。

这可能吗?如果不是,我应该使用什么?

你可以通过LINQ获得它:

Dim theValue As Integer = _SecurityLevel.Find(Function(kvp) kvp.Key = 4).Value

但我建议使用 Dictionary,如果不应该出现重复键的话。

Dim _SecurityLevel As New Dictionary(Of Integer, Integer)           
_SecurityLevel.Add(1, 0)
_SecurityLevel.Add(2, 1)
_SecurityLevel.Add(3, 2)
_SecurityLevel.Add(4, 3)
_SecurityLevel.Add(5, 4)
_SecurityLevel.Add(6, 5)

Dim result As Integer
_SecurityLevel.TryGetValue(4, result)

编辑

如评论中所述,FindIndex 在这里会更好,因为 Find 将 return 默认 KeyValuePair 和 key/value (0,0) 如果在列表中找不到条目。
像下面这样的东西会更可靠:

Dim index As Integer = _SecurityLevel.FindIndex(Function(kvp) kvp.Key = 4)
If index > -1 Then
    MsgBox(_SecurityLevel(index).Value)
Else
    'Not found
End If

试试这个:

Dim valueFromKey As Integer = (From currentValue In _SecurityLevel.AsEnumerable
                               Where currentValue.Key = 4
                               Select currentValue.Value).FirstOrDefault

词典似乎更适合您的应用。

Public Class SomeClass
    Public _SecurityLevel As New Dictionary(Of Integer, Integer)

    Public Sub New()
        _SecurityLevel.Add(1, 0)
        _SecurityLevel.Add(2, 1)
        _SecurityLevel.Add(3, 2)
        _SecurityLevel.Add(4, 3)
        _SecurityLevel.Add(5, 4)
        _SecurityLevel.Add(6, 5)
    End Sub
End Class

Private Sub OPCode()
    Dim sc As New SomeClass
    Dim v = sc._SecurityLevel(4)
    Debug.Print(v.ToString)
    'Prints 3
End Sub

在 class 中有一个 public 字段是不寻常的。