使用Array.ForEach初始化数组 - VB.NET

时间:2012-08-25 22:45:57

标签: vb.net arrays

我有一个RichTextBoxes数组,我想使用Array.ForEach初始化它们。

我做了以下尝试但没有成功:

Dim aRTB(5) as RichTextBox
Array.ForEach(aRTB, Function() New RichTextBox)

这段代码是唯一让它通过编译器的代码,但它不会初始化数组的任何部分。

未能通过编译器的代码包括:

Array.ForEach(aRTB, Function() Return New RichTextBox)
Array.ForEach(aRTB, Function(rtb as RichTextBox) rtb = New RichTextBox)

我意识到我可以轻松地设置一个常规循环(For,Do,While)来执行相同的操作,但我希望看到这种方式是否可行。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

我有一个RichTextBoxes数组,我想使用Array.ForEach初始化它们。

你做不到。 Array.ForEach对数组的每个元素执行一个操作,即它将数组的元素传递给函数一个参数:

Array.ForEach(aRTB, Sub(rtb as RichTextBox) ...do something with rtb...)

参数为ByVal,即你不能用它来更改数组的内容:

Array.ForEach(aRTB, Sub(ByRef rtb as RichTextBox) rtb = New RichTextBox())
' Yields compilation error: 
' Nested sub does not have a signature that is compatible 
' with delegate 'System.Action(Of RichTextBox)

由于您的数组最初是空的,因此无法对其上的Array.ForEach执行任何有用的操作。

很抱歉,您必须使用经典的For循环:

For i = 0 To 5
    aRTB(i) = New RichTextBox()
Next

0 To 5不是拼写错误...在VB.NET数组声明中指定上限,而不是大小。