3

私は - 時々 - パラメーターを使用します。メソッドは複雑な場合があり、ループと条件付きブロックが含まれています。ほとんどの場合、コンパイラーはこのエラーを出します

「制御が現在のメソッドを離れる前に、出力パラメーター 'xxx' を割り当てる必要があります」

だから、私はいつもすべてのパラメーターを無効にしてメソッドを開始していることに気づきました。知っておく必要があります。それは良い習慣ですか?

* 編集 *

つまり、「無効化」という言葉でデフォルト値を割り当てるということです!

4

8 に答える 8

7

null/etc を忘れてそのままにしておくのではなく、初期化せずにそのままにしておくと、(コンパイラ エラーとして) すべてのコード ブランチに適切な値を設定するように求められるため、私はそうしません。ただし、複数のコード パスがあり、そのうちの 1 つを除くすべてが同じ既定値 ( TryGet/TryParseメソッドなど) を使用している場合は、最初に既定値を割り当てるのが実際的であり、他の割り当ては 1 つだけです。

于 2012-12-24T10:57:08.067 に答える
2

パラメータに適用する意味によって異なりnullます。

通常null、未定義の不明な値を意味し、エラーによって取得できませんでした。パラメータの1つに値が見つかった場合null、通常は通常のプログラムフローではありません。

したがって、意味がである統一されたデフォルト値のセットを定義ready to be filledし、予期しないことが発生した場合はそれらを無効にすることをお勧めします。

もちろん、これはすべてプロジェクトと現在のコーディングとネーミングの基準に依存します

于 2012-12-24T10:53:37.180 に答える
1

それらに意味のあるデータが入力されることがわかっている場合は、それらをnullにする必要はありませんが、条件式で値が割り当てられている場合は、メソッドの開始時にそれらをnullにすることはおそらく問題ありません。ただし、デフォルト値を設定する方が適切なオプションになる場合があります。また、できるだけ控えめに out params を使用するようにしています。一般に、それらが必要な場合、どこかで設計ミスを犯していることがわかります。

于 2012-12-24T10:55:21.157 に答える
1

個人的には、Out パラメーターを使用するのではなく、おそらくクラスを返します。これらは「TryParse」の状況では優れていますが、使いすぎるとかなり混乱する可能性があると思います。

于 2012-12-24T10:50:17.597 に答える
1

メソッドのフローで out パラメータが設定されていることを確認する必要があります。これはコンパイラが必要とするものであり、交渉の余地はありません:)

これを行う 1 つの方法は、最初にデフォルト値に設定することです。これでうまくいきます。ただし、メソッドのフローが out パラメーターを設定しない問題を隠すことができます。

そのため、コードがどちらの方法でも確実に機能するように、十分な単体テストでメソッドを使用することをお勧めします。

于 2012-12-24T10:51:22.187 に答える
0

このコードを見てみましょう。

public void Get(out int Id_1, out int Id_2)
{
    if ( )
    {
        Id_1 = Value1;
        Id_2 = Value2;
    }
}

Id_1if ステートメント内でandを割り当てId_2ていますが、コンパイラは実行時に値が割り当てられるかどうかを判断できません。ifステートメントの前に、この変数のデフォルト値を割り当てる必要があります。私にはそれが良い習慣のように見えます。

public void Get(out int Id_1, out int Id_2)
{
    Id_1 = 0;
    Id_2 = 0;

    if ( )
    {
        Id_1 = Value1;
        Id_2 = Value2;
    }
}
于 2012-12-24T10:57:41.110 に答える