5

例 1:

SomeObject someObject = new SomeObject();
if (someObject.Method())
{
    //do stuff
}
//someObject is never used again

例 2:

if (new SomeObject().Method())
{
    //do stuff
}

最初の方法を 2 番目の方法よりも使用する利点はありますか、またはその逆ですか?

4

4 に答える 4

12

少なくとも 3 つの潜在的な利点があります。

  1. 読みやすさ: 多くの場合、特に新しい開発者にとっては、最初の例は 2 番目の例の構文よりも明白です。

  2. デバッグ エクスペリエンスの向上: のコンストラクターがSomeObject例外をスローした場合、最初のケースでは、デバッガーはその行で中断します。2 番目のケースでは、例外がコンストラクターにあるのかメソッドにあるのかが明確ではありません。オブジェクトのブレーク ポイントの設定と値の検査でも同じ問題が発生します。2 番目のケースではこれが難しく、メソッド内にブレーク ポイントを設定する必要があります。

  3. 最初のケースでは、その単一の呼び出しの外でオブジェクトを使用できます。1 回の呼び出しに必要なメソッドだけが必要で、オブジェクト参照が不要な場合は、静的メソッドの方が適している可能性があります。

于 2010-06-18T20:52:34.990 に答える
3

ほとんどの些細なケースでは、コンパイラはとにかくそれを削除します。値型には重要な点があります。それは、値を変数にコピーすると値が複製されるため、大きな変化を表す可能性があるということです。ただし、とにかく可変値型を推奨しないでください。

Single浮動小数点では、ローカルを使用すると異なる答えが得られるエッジケースがいくつかあります(ネイティブタイプは/などよりも幅が広いDouble)-これは、デバッグ/リリースで異なる結果を得ることができることも意味します(変数はコンパイラによって削除されます)。

変数がスタック上の値以上のことを実行できる場合もあります。つまり、ラムダ/ anonメソッドに「キャプチャ」されるか、out/に使用されrefますが、それが適用されることはめったにありません。

于 2010-06-18T20:57:15.233 に答える
2

デバッグ中に値を確認できるようにするのに役立ちます (また、オブジェクトが COM 相互運用機能などで処分する必要があるものである場合は、参照を保持することが重要になる可能性があるため、制御された環境でこれを行うことができます)。方法)。

名前が長い場合、または複数レベルのネストがある場合も、読みやすくなります。

于 2010-06-18T20:52:12.120 に答える
0

読みやすさを向上させるための最初のオプションをお勧めします。例:

var phoneNumberRx = new Regex(@"^\(\d{3}\)\d{3}-\d{4}$");
于 2010-06-18T20:57:35.093 に答える