1

RichTextBox の配列があり、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

RichTextBox の配列があり、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 に答える