1

変数を初期化すべきではないことをネット ( http://www.codinghorror.com/blog/2005/07/for-best-results-dont-initialize-variables.html ) で読んでいました。

どういうわけか私はそれを取得しません。多くの場合、私はそれを避けることができません。簡単な例を見てみましょう:

public int test(string s)
{
  int start = 0;
  int mod = 2;
  int output = 0;

  foreach (int i in s)
  {
    output = output + (i % mod) + start;
    start++;
  }

  return output;
}

それはナンセンスかもしれません :-) しかし問題は、初期化を回避できるかどうかです。mod は最初から 2 である必要があり、2 のままであるため、 modでは不可能かもしれません。しかし、 startoutputはどうですか? int startいつもだから書けないError Use of unassigned local variable。たぶんint start = nullもっと良いでしょうが、この場合もうまくいきません。では、このようなことを回避するにはどうすればよいでしょうか。

4

4 に答える 4

5

あなたは彼の記事を読み間違えました。彼の記事では、クラスに関する変数の初期化について具体的に話している。提示した場合、変数はすぐに使用されるため、使用する前に変数を初期化する必要があります。

編集:はい、この特定のケースではint、コンパイラーが自動的に0に初期化するため、変数を初期化する必要はありませんが、これがaまたはaintで異なる程度に行われる場合、初期化はメソッドのコンテキストで重要になります。stringDateTime

于 2012-07-12T13:48:32.337 に答える
5

あなたはその記事を読み間違えました。この記事では、メンバー変数(デフォルト値に自動的に初期化されるため、明示的な初期化は必要ありません)について説明していますが、ローカル変数(自動的に初期化されないため、明示的な初期化が必要)にルールを適用しようとしています。

于 2012-07-12T13:49:59.903 に答える
1

このようにメソッドを書き直すことができます

public int Test(string s) {
            const int mod = 2;
int start;                
int output = 0;

            foreach(int i in s) {
                output = output + (i % mod) + start;
                start++;
            }

            return output;
        }

この場合、開始変数を初期化する必要はありません。これは、内部スコープまたは外部スコープのどちらで宣言する場合にも当てはまります。

ただし、出力変数はメソッドによって返されるため、初期化する必要があります。ループが実行されない場合、変数は初期化されない可能性があります。

于 2012-07-12T13:50:16.580 に答える
-2

この記事では、変数をデフォルト値で初期化しないことについて説明しています。例えば、

int x = 0;

よくない。また、変数を使用する直前に変数を初期化(および宣言)して、クリーンなコードにする必要があります。

コンストラクターでの初期化は、使用直前ではありません。

于 2012-07-12T13:51:12.933 に答える