13

オブジェクトからダブルを引き出すために次のアプローチのいずれかを使用することの長所と短所は何ですか?個人的な好みだけでなく、フィードバックを求めている問題には、デバッグのしやすさ、パフォーマンス、保守性などがあります。

public static double GetDouble(object input, double defaultVal)
{
    try
    {
        return Convert.ToDouble(input);
     }
     catch
     {
        return defaultVal;
     }
}

public static double GetDouble(object input, double defaultVal)
{
    double returnVal;
    if (double.TryParse(input.ToString(), out returnVal))
    {
        return returnVal;
    }
else
    {
        return defaultVal;
    }
}
4

4 に答える 4

21
  • TryParse例外をキャッチするよりも高速になります
  • TryParse何かが予想されることを示します-ここでは例外的なことは何も起こっていません。データが有効でない可能性があると思われるだけです。
  • TryParse通常の制御フローに例外処理を使用していません

基本的に、一緒に行きますTryParse:)

ちなみに、コードは次のように書き直すことができます。

public static double GetDouble(object input, double defaultVal)
{
    double parsed;
    return double.TryParse(input.ToString(), out parsed)) ? parsed : defaultVal;
}
于 2010-03-12T10:04:54.243 に答える
4

TryParseは、TryCatchのパフォーマンスよりも効率的です。

于 2010-03-12T10:04:29.590 に答える
2

不正な入力に対してParseメソッドが例外をスローするようにすることは、設計上の欠陥でした。ユーザーからデータを取り込む場合、不適切な入力が予想される動作です。例外のスローはコストがかかります。コードで日常的に発生させたいことではありません。

ありがたいことに、Microsoftは彼らの間違いに気づき、TryParseメソッドを追加しました。TryParseは、不正な入力で例外をスローするオーバーヘッドを発生させませんが、欠点は2つのデータを返さなければならないため、使用するのが少し厄介だと感じます。

そもそも壊れたParse実装を作成していなかった場合、TryParseは単にParseと呼ばれます。

于 2010-03-12T10:19:39.867 に答える
2

TryParseの方が高速で、通常は優れていますが、エラーについてクライアントにより多くの情報を提供できるため、フレームワークおよびバックエンドプログラミングでのTryCatchアプローチをお勧めします。

public double GetAge()
{
   try
   {
      var input = _dataProvider.GetInput();
      return Convert.ToDouble(input);
   }
   catch(Exception ex)
   {
      throw new MyBackendException(ex);
   }
}
于 2010-03-12T10:22:30.323 に答える