これは愚かな質問かもしれませんが、私はtry/catchブロックを使用することのパフォーマンスに興味があります。キャッチブロックを使用して戻り値が正しくない
私は、DataGridCellのバックグラウンドプロパティにコンバーターを割り当てるDataGridを持っています。コンバーターでは、今年のデータの価値を昨年のデータと比較します。今年のデータが3%を超える場合、私は緑の背景を返します。それが> 0%で< 3%なら、私は黄色を返します。それは< 0%だ場合と、私は赤を返す:
string x = values[0].ToString().Replace("$", "").Replace(",", ""); //This year's number
string y = values[1].ToString().Replace("$", "").Replace(",", ""); //Last year's
result = (((float.Parse(x) * 100)/float.Parse(y)) - 1) * 100;
if (result >= 3)
return Brushes.LimeGreen;
else if (result >= 0)
return Brushes.Yellow;
else
return Brushes.Red;
しかし、いくつかのケースでは、セルは、昨年の値を持ちません。あなたが推測できるように、0(またはCellが空のときにコンバーターが受け取ると思われるテキスト)で割ることはかなり悪い考えであり、例外がスローされます。だから、私はこれに対処する最も簡単な方法は判断しました:
だから、try
{
result = (((float.Parse(x) * 100)/float.Parse(y)) - 1) * 100;
}
catch
{
return Brushes.DarkOrange;
}
例外がスローされた場合(と比較する値がないことによって)、オレンジを返し、一日を呼び出します。
現在、私はそれが1行のデータにしか起こらないと予測することができるので、約10個のセルしか捕まえていません(編集:はい、私はオレンジ色を返すことをお勧めします)。しかし、未来が進むにつれて、それがより多く起こる可能性があります。
try/catchブロックは、これを処理するための最も簡単で迅速な方法です(私が知る限り)。それは明らかに私がエラーを知っているので、明らかに唯一の方法ではありませんので、try/catchブロックを使用するのは悪い考えですか?悪い考えでは、何度も何度も繰り返されるのでパフォーマンスが低下します。 ?エラーが何であるかを知っているので、私はそれをプリエンプトするか、try/catchブロックをうまく使っていますか?
これは非常に悪い考えです。 .Net例外処理のベストプラクティスに関するGoogleの記事例外の実行について心配するには、赤いライトと警告サイレンが点滅するように設定する必要があります。 – asawyer
代わりにTryParseを使用してください。 – ken2k