VB .Net 获取具有最小值的整数变量的名称
VB .Net Get the integers variable's name that has the loweset value
我希望从整数变量数组中获取包含最小值的变量名。
Dim var1 As Integer = 101
Dim var2 As Integer = 14
Dim var3 As Integer = 75
Dim var4 As Integer = 8
Dim var5 As Integer = 9
Dim vals As Integer() = {var1, var2, var3, var4, var5}
Dim smallest As Integer = Integer.MaxValue
For Each element As Integer In vals
smallest = Math.Min(smallest, element)
Next
smallest = 8,但是如何获取名称“var4”?
谢谢
在编译时,局部变量的名称仅在您的 Visual Basic 文本中已知。它们在编译的应用程序中丢失了。也就是说,您无法在 运行 时间访问它们。
您可以使用元组将名称与数字一起存储为字符串。
Dim namedIntegers As (name As String, value As Integer)() = {
("var1", 101),
("var2", 14),
("var3", 75),
("var4", 8),
("var5", 9)
}
Dim smallest = namedIntegers.OrderBy(Function(x) x.value).First()
Console.WriteLine($"Smallest variable is {smallest.name} = {smallest.value}")
Console.ReadKey()
版画
Smallest variable is var4 = 8
Function(x) x.value
是 Lambda Expression.
可以得到数组中的索引,但不能得到变量名:
Dim var1 As Integer = 101
Dim var2 As Integer = 14
Dim var3 As Integer = 75
Dim var4 As Integer = 8
Dim var5 As Integer = 9
Dim vals As Integer() = {var1, var2, var3, var4, var5}
Dim smallest As Integer = Integer.MaxValue
Dim smallestIndex As Integer = 0
For Each i As Integer = 0 To vals.Length - 1
If vals(i) < smallest Then
smallestIndex = i
smallest = vals(i)
End If
Next
变量名供程序员使用。如果您将它们暴露给用户而不是为了报告错误,那您就做错了。
也许您想要这样的数组:
Dim var(5) As Integer = {0, 101, 14, 75, 8, 9}
现在索引也隐含了变量。
您无法获取变量名,因为它不是用这些变量的值填充的数组的一部分。如果索引不够用,确实需要名字,你应该考虑使用不同的集合:Dictionary(Of String, Int32)
:
Dim dict As New Dictionary(Of String, Int32)
dict.Add("var1", 101)
dict.Add("var2", 14)
dict.Add("var3", 75)
dict.Add("var4", 8)
dict.Add("var5", 9)
Dim lowestValuePair = dict.OrderBy(Function(pair) pair.Value).First()
Dim name As String = lowestValuePair.Key ' var4
Dim value As Int32 = lowestValuePair.Value ' 8
我在这里使用的是 LINQ 方法 OrderBy
和 First
,因此您需要添加 Imports System.Linq
我希望从整数变量数组中获取包含最小值的变量名。
Dim var1 As Integer = 101
Dim var2 As Integer = 14
Dim var3 As Integer = 75
Dim var4 As Integer = 8
Dim var5 As Integer = 9
Dim vals As Integer() = {var1, var2, var3, var4, var5}
Dim smallest As Integer = Integer.MaxValue
For Each element As Integer In vals
smallest = Math.Min(smallest, element)
Next
smallest = 8,但是如何获取名称“var4”?
谢谢
在编译时,局部变量的名称仅在您的 Visual Basic 文本中已知。它们在编译的应用程序中丢失了。也就是说,您无法在 运行 时间访问它们。
您可以使用元组将名称与数字一起存储为字符串。
Dim namedIntegers As (name As String, value As Integer)() = {
("var1", 101),
("var2", 14),
("var3", 75),
("var4", 8),
("var5", 9)
}
Dim smallest = namedIntegers.OrderBy(Function(x) x.value).First()
Console.WriteLine($"Smallest variable is {smallest.name} = {smallest.value}")
Console.ReadKey()
版画
Smallest variable is var4 = 8
Function(x) x.value
是 Lambda Expression.
可以得到数组中的索引,但不能得到变量名:
Dim var1 As Integer = 101
Dim var2 As Integer = 14
Dim var3 As Integer = 75
Dim var4 As Integer = 8
Dim var5 As Integer = 9
Dim vals As Integer() = {var1, var2, var3, var4, var5}
Dim smallest As Integer = Integer.MaxValue
Dim smallestIndex As Integer = 0
For Each i As Integer = 0 To vals.Length - 1
If vals(i) < smallest Then
smallestIndex = i
smallest = vals(i)
End If
Next
变量名供程序员使用。如果您将它们暴露给用户而不是为了报告错误,那您就做错了。
也许您想要这样的数组:
Dim var(5) As Integer = {0, 101, 14, 75, 8, 9}
现在索引也隐含了变量。
您无法获取变量名,因为它不是用这些变量的值填充的数组的一部分。如果索引不够用,确实需要名字,你应该考虑使用不同的集合:Dictionary(Of String, Int32)
:
Dim dict As New Dictionary(Of String, Int32)
dict.Add("var1", 101)
dict.Add("var2", 14)
dict.Add("var3", 75)
dict.Add("var4", 8)
dict.Add("var5", 9)
Dim lowestValuePair = dict.OrderBy(Function(pair) pair.Value).First()
Dim name As String = lowestValuePair.Key ' var4
Dim value As Int32 = lowestValuePair.Value ' 8
我在这里使用的是 LINQ 方法 OrderBy
和 First
,因此您需要添加 Imports System.Linq