PG日誌

受託系 PG が C# の事を書いています

ArgumentNullException の文字列リテラルをやめる

2017年9月25日追記

もうあれからだいぶたってC#も7.1まで進化し、MethodBaseを取らないでも書けるようになりました。

C#6.0から

新しい書き方は以下の通りです。C# 6で導入されたnameof演算子を使うと変数名が取れます。

throw new ArgumentNullException(nameof(変数名));
C# 5まで

古い書き方はこちら。

自分で null チェックしたときに投げる標準の例外で ArgumentNullException があるけどパラメータ名を指定した方が後々自分が助かります。

ArgumentNullException(string)

ただ何も考えないで

throw new ArgumentNullException("hogehoge");

とするとメソッドの仮引数の名前が変わるたびに「手動で」この部分も書き換えないといけません。が、面倒だし放置されることが多いですね。そしてトラブルになって「?」になります。

が、以下のように書くとその煩わしさから解放されます。

throw new ArgumentNullException(MethodBase.GetCurrentMethod().GetParameters()[0].Name);

流石にパラメータの順序が変わったら数字を変える必要があります。