[C# 6.0] nameof 演算子で引数名などを文字列として取得できる (ArgumentExceptionとかで楽)

nameof 演算子を使うと引数名を文字列に変換できる。 変数名だけじゃなくてクラス名とかメソッド名とかも変換可能。

1
2
3
4
5
6
7
8
9
10
11
12
13
using System;

class Program
{
static void Main(string[] args)
{

// "引数名は args です" と出力される
Console.WriteLine($"引数名は {nameof(args)} です");

// ArgumentExceptonのparamNameなどの指定が楽に
throw new ArgumentException("", paramName: nameof(args));
}
}

とはいえ C# 6.0 が使えない場合でも可能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Linq.Expressions;

class Program
{
public static string NameOf<T>(Expression<Func<T>> e)
{
return ((MemberExpression)e.Body).Member.Name;
}

static void Main(string[] args)
{

// "引数名は args です" と出力される
Console.WriteLine("引数名は {0} です", NameOf(() => args));
Console.ReadKey();
}
}