65

わかっています...わかっています...パフォーマンスはここでの主な関心事ではありませんが、好奇心のために、何が優れているのでしょうか?

bool parsed = int.TryParse(string, out num);
if (parsed)
...

また

try {
    int.Parse(string);
}
catch () {
    do something...
}
4

9 に答える 9

90

より良いは非常に主観的です。たとえば、私は個人的にはint.TryParseを好む. ただし、 (ドキュメントint.Parseによると) 3 つの異なる例外をスローできます。

  • 入力がヌルです
  • 入力が有効な形式ではありません
  • 入力にオーバーフローを引き起こす数値が含まれています

失敗する理由が気になる場合は、int.Parse明らかにより良い選択です。

いつものように、コンテキストが王様です。

于 2011-02-09T13:56:38.833 に答える
40

変換が時々失敗するのは例外的なことですか、それとも変換が時々失敗することは予期された正常なことですか? 前者の場合は、例外を使用します。後者の場合は、例外を避けてください。例外は、理由から「例外」と呼ばれます。例外的な状況に対処するためにのみ使用してください。

于 2011-02-09T15:16:22.767 に答える
24

変換が時々失敗することが実際に予想される場合は、次のように、条件付き (三項) 演算子int.TryParseを使用して 1 行できちんと使用するのが好きです。

int myInt = int.TryParse(myString, out myInt) ? myInt : 0;

この場合、TryParse メソッドが失敗すると、ゼロがデフォルト値として使用されます。

nullまた、変換が失敗した場合にデフォルト値を上書きする null 許容型にも非常に役立ちます。

于 2012-04-18T22:25:59.547 に答える
11

最初。2 つ目は、例外によるコーディングと見なされます。

于 2011-02-09T13:53:22.827 に答える
8

個人的には、次のことをお勧めします。

if (int.TryParse(string, out num))
{
   ...
} 
于 2011-02-09T13:54:41.027 に答える
4

最初!例外によってコーディングしないでください。

あなたはそれを短くすることができます

if (int.TryParse(string, out num))

于 2011-02-09T13:55:04.933 に答える
3

まず、ずっと。ジョージが言ったように、2 つ目は例外によるコーディングであり、パフォーマンスに大きな影響を与えます。そして、常にパフォーマンスを気にする必要があります。

于 2011-02-09T13:55:25.517 に答える
2

例外をキャッチするとオーバーヘッドが増えるため、TryParse を使用します。

さらに、TryParse メソッドは、変換が失敗しても例外をスローしません。s が無効で正常に解析できない場合に、例外処理を使用して FormatException をテストする必要がなくなります。

最後の部分はここからコピペ

于 2011-02-09T13:56:01.813 に答える
1

他に覚えておくべきことは、例外がVisual Studioのデバッグ/出力ウィンドウに(オプションで)ログに記録されることです。例外のパフォーマンスオーバーヘッドが重要でない場合でも、デバッグ時に例外ごとに1行のテキストを書き込むと、処理速度が低下する可能性があります。さらに注目すべき例外は、失敗した整数解析操作のすべてのノイズの中で溺れる可能性があります。

于 2011-02-09T15:28:22.743 に答える