1

我有一个 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)来执行相同的操作,但是我想看看这种方式是否可行。

感谢您的任何帮助。

4

1 回答 1

2

我有一个 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 数组声明中指定上限,而不是大小。

于 2012-08-25T23:03:49.257 回答