8

次のコードを参照してください。

string test = "";
int output = -1;

if (int.TryParse(test, out output))
{
    Console.WriteLine("Parsed");
}

Console.WriteLine(output);

失敗したTryParse()場合、ブロックはスキップされ、Console.WriteLine("Parsed")呼び出されず、の値はoutput同じ(-1)になりませんか?

戻ってきた0

4

4 に答える 4

15

MSDNから:

変換が成功した場合、または変換が失敗した場合は、このメソッドが返されるときに、文字列に含まれる数値に相当する 32 ビットの符号付き整数値が含まれます。zero

于 2012-06-13T09:59:27.337 に答える
10

の実装は、TryParse 返すout前にパラメーターをデフォルトにする必要があります。そうしないと、呼び出し側からパラメーターを初期化したかどうかに関係なく、コンパイルされません。outこれは、パラメータを持つすべてのメソッドに当てはまり、 に固有のものではありません。outTryParse

それをコーディングした人は、解析が失敗したときにパラメーターをデフォルトでゼロにすることを選択しました。

out重要な部分は、パラメータ メソッドが渡されたときにパラメータの元の値を受け入れると考えてはならないというoutことです。実際、コンパイラが報告するように、パラメータを受け入れることはできません。

割り当てられていない out パラメータ 'blah' の使用

メソッド内でパラメータ値を代入する前に使用しようとした場合。outしたがって、パラメーターとして割り当てて渡す値はすべて無視/上書きされることを実際に保証できます。

于 2012-06-13T09:59:33.877 に答える
2

C#では、outパラメーターを割り当てる必要があり、最初に読み取ることはできません。(メソッドが開始されると、outパラメーターは初期化されていない変数のように扱われます。)

したがって、の以前の値outputは関係ありません。メソッドを作成した人が上書きするTryParse必要がありました。そうしないと、コンパイルできませんでした。

同時に、TryParseメソッドは以前の値のにアクセスできませんoutput。したがって、何らかの値を選択する必要があります。この場合、開発者はを選択し0ました。

于 2012-06-13T10:02:01.753 に答える
2

失敗するreturn falseと、if ステートメントのコードは実行されません。

変換が失敗した場合、それも返されます。それが0理由ですoutput=0

于 2012-06-13T09:59:26.380 に答える