194

メソッド名が「Try」で始まる場合の意味について同僚と話し合っていました。

以下の意見がありました。

  • メソッドが null 値を返す可能性がある場合は、"Try" を使用します。
  • メソッドが例外をスローしない場合は、「Try」を使用します。

正式な定義は?メソッド名の「Try」は何と言っていますか? これに関する公式のガイドラインはありますか?

4

6 に答える 6

158

これはTryParseパターンと呼ばれ、Microsoft によって文書化されています。公式の例外とパフォーマンスの MSDN ページには次のように書かれています。

例外に関連するパフォーマンスの問題を回避するために、一般的なシナリオで例外をスローする可能性があるメンバーの TryParse パターンを検討してください。

したがって、通常の使用例では例外がスローされる可能性がある (int の解析など) コードがある場合、TryParseパターンは理にかなっています。

于 2013-06-20T07:35:01.600 に答える
128

(訂正) Erik が提案したように、公式のガイドラインがあります。

メソッドを見るTrySomethingと、それを想定しています

  • 投げない
  • 戻り値bool
  • 値が必要な場合は、「out」パラメーターを介して返されます
  • Something自分で例外を処理できるメソッドが存在します。(編集、Jesse Webbの提案)
于 2013-06-20T07:31:06.680 に答える
9

try進めたいときに使うといいと思います。メソッドが何らかの値を返すかどうかは問題ではありません。

ケース 1: 正常に返された場合は、何らかの方法で続行できます。

ケース 2: 戻らない場合: それでも問題ありません。他の方法で進めることができます。

そして、そのメソッドの出力として何らかの値が期待される場合は、outパラメーターを使用してください。

int value
if (dictionary.TryGetValue("key", out value))
{
    // Proceed in some way
}
else
{
    // Proceed in some other way
}
于 2013-06-20T10:13:00.127 に答える
6

次の場合は、必ずメソッド名に含めtryてください。

  • あなたは例外をスローしません
  • メソッドには次の署名があります。bool TrySomething(input, out yourReturn)

したがって、基本的にtry-methods を使用すると、ブール値の結果しか返されません。

したがって、次のコードは例外をスローしません。

string input = "blabla";
int number;
if (int.TryParse(input, out number))
{
// wooohooo we got an int!
} else
{
//dooh!
}

このコードは例外をスローできます (この場合はスローします)。

string input = "blabla";
int number;
try
{
     number = int.Parse(input); //throws an exception
}
catch (Exception)
{
     //dooh!
}

Try メソッドを使用することは、より安全で防御的なコーディング方法です。また、コード スニペット #2 は、整数でない場合、実行により多くのパフォーマンスが必要です。

于 2013-06-22T23:37:44.987 に答える
6

メソッド呼び出しが無効な結果を生成する可能性があるという事実を明らかにしたい場合は、メソッド名に「Try」を使用する必要があります。ちなみに、.NET 標準に従うと、これは例外を発生させる関数ではなく、プログラムの観点からすると、何らかの値VALIDまたは値を返す関数です。NON_VALID

最後に、これはすべて、グループで使用することを決定した命名規則に関するものです。

于 2013-06-20T07:32:43.907 に答える