私は知っている..私は知っている...パフォーマンスはここでの主な関心事ではなく、好奇心のためだけに、何が良いですか?
bool parsed = int.TryParse(string, out num);
if (parsed)
...
OR
try {
int.Parse(string);
}
catch () {
do something...
}
Betterは非常に主観的です。たとえば、個人的にはint.TryParse
、私はほとんど気にしないのでなぜ解析が失敗しても、解析は失敗します。しかしながら、 int.Parse
は( ドキュメント に従って)3つの異なる例外をスローできます。
失敗の理由を気にする場合は、int.Parse
が明らかにより良い選択です。
いつものように、コンテキストは王様です。
変換が時々失敗するのは例外か、変換が失敗するのはexpected and normalですか?前者の場合、exceptionを使用します。後者の場合、例外を避ける。例外は、理由により「例外」と呼ばれます。 例外状況を処理するためにのみ使用する必要があります。
変換が時々失敗することが本当に予想される場合、int.TryParse
など 条件付き(三項)演算子 を使用して、次のように1行できれいに:
int myInt = int.TryParse(myString, out myInt) ? myInt : 0;
この場合、TryParseメソッドが失敗すると、デフォルト値としてゼロが使用されます。
また、変換が失敗した場合にデフォルト値をnull
で上書きする、null許容型に対しても非常に便利です。
最初。 2番目は、例外によるコーディングと見なされます。
個人的に、私は好む:
if (int.TryParse(string, out num))
{
...
}
最初!例外によってコーディングしないでください。
あなたはそれを短くすることができます
if (int.TryParse(string, out num))
まず、断然。ジョージが言ったように、2番目は例外によるコーディングであり、パフォーマンスに大きな影響があります。そして、常にパフォーマンスが問題になるはずです。
例外をキャッチするとオーバーヘッドが増えるため、TryParseを使用します。
さらに、変換が失敗した場合、TryParseメソッドは例外をスローしません。 sが無効であり、正常に解析できない場合に、例外処理を使用してFormatExceptionをテストする必要がなくなります。
here からコピーペーストされた最後の部分
留意すべき他のことは、例外がVisual Studioのデバッグ/出力ウィンドウに(オプションで)ログに記録されることです。例外のパフォーマンスオーバーヘッドが重要でない場合でも、デバッグ時に例外ごとに1行のテキストを書き込むと、処理が遅くなる可能性があります。失敗した整数解析操作のすべてのノイズの中で、より注目に値する例外もdrれるかもしれません。