ReSharperと(近年)Visual Studioは、ArgumentNullExceptionと同様の引数チェックを挿入することを提案しています。 偶然にコードベースに何度か紹介したほどの筋肉の記憶です。
直接投げることは、フロー制御分析の観点からはより慣用的なC#です。 C#コンパイラは、 Guard
ではなくthrow
を使用する場合、使用前に値を返したり変数を初期化したり、switchcaseから抜け出す必要がないことを理解しています。 ReSharperのヌルフローチェックも同じ方法です。
また、C#7.0では、式のスローが便利です。 たとえば、構文_foo = foo ?? throw new ArgumentNullException(nameof(Foo));
。
寄稿者と私たち自身がGuardを使用する代わりに直接例外をスローできるようにする他の長所または短所は何ですか?
Guard
クラスを使用する主な利点は、私が正しく覚えていれば、使いやすさです。 C#対応のIDEでは、私や新しい貢献者にとって、これはもはや最も簡単なオプションではありません。 一貫性が必要ですか、それとも一方向ですか、それとも他の方法ですか? 一貫性は、私たちの一部にとって最も簡単なことと、他の人にとって最も簡単なこと(潜在的に)を比較します。
私は個人的にガードクラスが好きですが、発見可能性の問題があることに同意します。 私は通常、通常の寄稿者にそれを提案しますが、1回限りの寄稿者には言及しません。 これは私たちが特に一貫性を必要とする分野ではないと思いますね。 そこにあるときは嬉しいですが、ないときは心配していません。
私はこの問題の結果にかなり無関心です、どちらの方法でも私には問題ありません😊
私もそれについてやや無関心です。 例外コンストラクターの一貫性と正しい使用法を提供します(メッセージとパラメーター名を数回逆方向に見ました)が、コールスタックに追加のメソッドも追加します。 さらに、あなたが言うように、新しいC#構文はそれをはるかに簡単にします。
大規模なパージが必要かどうかはわかりませんが、必要がなくても問題ありません。
どうもありがとう、いいですね!
最も参考になるコメント
私は個人的にガードクラスが好きですが、発見可能性の問題があることに同意します。 私は通常、通常の寄稿者にそれを提案しますが、1回限りの寄稿者には言及しません。 これは私たちが特に一貫性を必要とする分野ではないと思いますね。 そこにあるときは嬉しいですが、ないときは心配していません。
私はこの問題の結果にかなり無関心です、どちらの方法でも私には問題ありません😊