103

VB.NET には、out関数に渡される変数を初期化する必要がない C# 関数パラメーターと直接同等のものがありますか?

4

7 に答える 7

106

いいえ、outVB にはキーワードに相当するものはありません。

ただし、VB はメソッド内のすべてのローカル変数を自動的に初期化するためByRef、最初に変数を明示的に初期化する必要なく使用できます。

例:

Sub Main()
  Dim y As Integer
  Test(y)
End Sub

Sub Test(ByRef x As Integer)
  x = 42
End Sub

(フレームワーク内のコード (たとえば、Double.TryParse ) を調べると、<OutAttribute>追加されたパラメーターが表示される場合がありますが、COM 相互運用またはプラットフォーム呼び出しのために呼び出しがマーシャリングされている場合にのみ違いが生じます。)

于 2010-12-05T12:28:39.567 に答える
35

いいえ、初期化されていない変数を警告なしでメソッドに渡すことを許可する同等の構造はありませんが、パラメーター定義で属性を指定する私の質問と回答で述べたように、VB はそれを無視しますが、C# によって処理されますパラメータとして。<Out()>ByRefout

したがって、参照変数を事前に初期化し、意図を示すようNothing 指定<Out()> ByRefします (これは、C# ユーザーがメソッドにアクセスした場合に機能します)。

割り当てられていない参照変数のデフォルトにいつアクセスするつもりなのか分かっている場合は、プロジェクト レベルで [Nothing警告構成] [割り当て前の変数の使用] を[なし]に設定できます ([プロジェクト プロパティ] > [コンパイル] で、おそらくこの設定を変更する前に構成を「すべての構成」に設定したい)、または VS2015 (VB.NET 14) では、 を使用できます#Disable Warning BC42030

于 2011-08-13T13:59:15.903 に答える
11

C# バージョン

  void TestFunc(int x, ref int y, out int z) {
  x++;  
  y++;
  z = 5;
}

Vb.net バージョン

    Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
  x += 1
  y += 1 
  z = 5 
End Sub

ここで答えを見つけました

アップデート

コメントに記載されているように、out スロットで使用されるパラメーターを初期化することを忘れないでください

于 2010-12-05T12:26:32.513 に答える
1

VB.NET で参照渡しメソッドを使用できます。

初期化せずに変数を使用できないため、C# では Out パラメーター メカニズムが必要です。

VB.NET はそれ自体で自動的に実行されるため、特別なキーワードは必要ありません。

ByRefを使用するだけです。

于 2012-09-04T10:09:17.770 に答える
-4

変数の前にキーワードByRefを使用します。

于 2010-12-05T12:23:40.230 に答える