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);
流石にパラメータの順序が変わったら数字を変える必要があります。