我知道如何创建一个数组并正常循环 - 但是如果我需要一个多列数组怎么办?例如通常我可以这样做:
For Each row in NameofArray
Dim name as String = row
Response.Write("Hello " & name & "!")
Next
但是,如果我想做类似的事情呢?
For Each row in NameofArray
Dim name as String = row.name
Dim age as Integer = row.age
Response.Write("Hello " & name & "! You are " & age & " years old!"
Next
如果数组无法做到这一点,还有另一种方法可以实现吗?
答案 0 :(得分:4)
创建自定义数据类型:
public struct DataType
public string Name;
public int Age;
}
你可以在类似的数组中使用这种类型:
DataType[] myData = new DataType[100];
myData[0].Name = "myName";
myData[0].Age = 100;
注意,如果通过foreach循环遍历该数组,则每次迭代返回的元素都不会被更改。如果这是您的要求,请考虑在上面的DataType声明中使用“class”而不是“struct”。这将带来一些其他含义。例如,类DataType的实例将明确地通过'new'关键字创建。
答案 1 :(得分:2)
在阅读你的评论之后,我认为我的另一个答案可能就是你要找的。 p>
什么类型的行和NameOfArray是什么类型的?
如果您希望将行放入具有多个成员的coumpound类型,那么有几个选项。
Structure Row
Public Name as String
Public Age as Integer
End Structure
例如。如果您希望将引用类型替换Class
替换Structure
。
或使用匿名类型
Dim row = New With {Name = "Bob", Age = 21}
然后,您可以使用泛型来创建可以使用ForEach
进行迭代的行列表。
Dim NameOfList As System.Collections.Generic.List(of Row)
或者它是否是支持
的LINQ查询的结果IEnumerable(of New With{Name As String, Age As Int}). //Not sure if this is VB
我不确定我是否理解你的问题,并希望这是你想要的那种。
正如你从我的回答者那里看到的,对C#匿名类型的支持是优越的,但是,自从你在VB.Net中提出这个问题后,我将自己局限于这种情况。
答案 2 :(得分:1)
您是否尝试过Dictionary Class。您可以使用KeyValue对类循环遍历Dictionary。
// Create a new dictionary of strings, with string keys.
//
Dictionary<string, string> openWith =
new Dictionary<string, string>();
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
foreach(var item in openWith)
{
Console.WriteLine(item.Key +" can be open with " + item.value);
}
答案 3 :(得分:1)
你需要(可以)使用两个维度索引到你的数组,即......
Dim array(,) As Object = { _
{"John",26}, _
{"Mark",4} _
}
For row As Integer = 0 to array.GetUpperBound(0)
Dim name as String = CStr(array(row,0))
Dim age as Integer = CInt(array(row,1))
Response.Write("Hello " & name & "! You are " & age & " years old!")
Next
尽管将这类信息存储在类或用户定义的某种类型中会更好。
答案 4 :(得分:1)
在阅读你的评论后,我想我理解了这个问题。
你可以做到
///Spacer Top
Dim NameOfArray = {New With {.Age = 21, .Name = "Bob"}, New With {.Age = 74, .Name = "Gramps"}}
///Spacer Bottom
如果你想创建一个IEnumberable匿名类型的Name Age元组;-p