私のコードでは、次のパターンが一般的です。クラスには複数のコンストラクターがあります。1 つは「指定されたコンストラクター」で、その他は便宜上のものです。コードは次のようになります。
class Foo
{
Foo(int bar, string baz)
{
this.Bar = bar;
this.Baz = baz;
}
Foo()
: this(0, "Empty baz")
{
}
Foo(Foo f)
: this(f.Bar, f.Baz)
{
}
int Bar {get;set;}
string Baz {get;set;}
}
を呼び出すパラメーターなしのコンストラクターの場合this(...)
、これは正常に機能します。ただし、誰かがnull
引数としてコピー コンストラクターに渡すとFoo(Foo)
、式により、結果は null 参照例外になりますf.Bar
。代わりに ArgumentNullException を確認したいので、通常、このような場合はパターンから外れて、コンストラクターを「手動で」実装します。これにより、コードが重複します。これを回避するエレガントな方法はありますか?つまり、指定されたコンストラクターを1つ持ち、他のコンストラクターのパラメーター検証を実行しますか?
編集済み:この例は、問題を説明するためだけの必要最小限のものです。実際の例では、より複雑な引数検証ロジックと初期化コードがあります。