2015-02-05 55 views
0

我想建立一个数组,其行的键入字符串。行不必具有相同数量的列(锯齿形数组)或每列中都有值。我希望能够更新数组现有行中的列。VB.net键控阵列

我试过使用字典。

Dim ToolUsers as New Dictionary(Of String, Array) 
Dim UserData() As String = {"", "", "", "", "", "", "", "") 

Of String让我访问基于所述String值的任何特定行但Array是引用类型和总是指向存储在UserData阵列中,而不是被一个值类型和在存储该数组的值的电流值Dictionary

我查看ArrayArray s,但它似乎不允许通过密钥访问现有行或允许更新现有值。

VB.net中是否存在这样的构造?

+0

字典应该工作。您需要为每个新的Dictionary项目创建一个新数组,您不能只修改现有数组的值,并期望使用不同的数据创建一个新的Dictionary项目。 – Blackwood 2015-02-05 22:31:50

+0

很难理解为什么价值类型行为对你很重要。也许你忽略了Array.Copy()。 – 2015-02-05 23:27:19

回答

0

你可以达到你想要使用Dictionary什么,但在.NET are reference types阵列,所以你必须要小心你如何填充你的字典,而不是重复使用相同的数组,如果你真的想在每个项目不同的数据。例如

' Create a dictionary from string to array of string 
Dim x = New Dictionary(Of String, String())() 
x("A") = New String() { "A1", "A2", "A3" } 
' A : A1, A2, A3 
x("A")(1) = "A2x" 
' A : A1, A2x, A3 
Dim y = New String() { "Y1", "Y2" } 
x("Y1") = y ' points to same array as y 
x("Y2") = DirectCast(y.Clone(), String()) ' shallow copy of y, which is OK since String is immutable 
' A : A1, A2x, A3 
' Y1 : Y1, Y2 
' Y2 : Y1, Y2 
y(0) = "Y1x" 
' A : A1, A2x, A3 
' Y1 : Y1x, Y2 
' Y2 : Y1, Y2