2

TryParse(string s, Out object result) メソッドを実装しています。解析が失敗した場合、以前の結果がそのまま残るように、out パラメーターに触れないようにしたいと思います。しかし、VS2k8 では許可されません。何があっても out オブジェクトの値を設定する必要があります。

コンパイラを喜ばせるために、単に result = result を入れるべきですか? 何か不足していますか?

4

6 に答える 6

7

null (またはより一般的には default(T)) を割り当てます。値を割り当てる必要があります。それが「out」の意味です。

于 2009-05-14T08:34:06.917 に答える
6

result = resultそれはパラメーターであるため、あなたの提案は機能しませoutん。最初から確実に割り当てられているわけではないため、値を割り当てるまでその値を読み取ることはできませ

result = null;

間違いなく、objectout パラメータを使用する正しい方法です。基本的default(T)にどんなタイプでも使えTます。(このdefault演算子はジェネリック メソッドで役立ちます。非ジェネリック コードの場合は、通常null、 , 0 などを使用します。)

ref編集: Boris からのコメントに基づいて、パラメーターとパラメーターの違いについて詳しく説明する価値があるかもしれませんout:

出力パラメータ

  • 発信者によって確実に割り当てられる必要はありません
  • メソッドの開始時に「確実に割り当てられていない」として扱われます (ローカル変数と同様に、最初に割り当てないと値を読み取ることができません)。
  • メソッドが正常に終了する前に (メソッドによって) 確実に割り当てられる必要があります (つまり、メソッドが戻る前に、パラメーターに値を割り当てずに例外をスローできます)。

参照パラメータ

  • 発信者によって確実に割り当てられる必要があります
  • メソッドの開始時に「確実に割り当てられた」ものとして扱われます (そのため、最初に割り当てずに値を読み取ることができます)
  • メソッド内で割り当てる必要はありません (つまり、パラメーターを元の値のままにしておくことができます)
于 2009-05-14T08:36:47.143 に答える
2
result = null;
于 2009-05-14T08:34:00.740 に答える
0

値を割り当てたくない場合は、 out の代わりに ref を使用できますが、これは呼び出し元によって初期化する必要があります。

于 2009-05-14T08:45:23.973 に答える
0

デフォルト値を入れるだけです。たとえば、Int32.TryParse メソッドはゼロを設定します。

于 2009-05-14T08:34:45.840 に答える
-3

結果を設定するはずのコードの前に例外をスローできます。

于 2009-05-14T08:39:38.073 に答える