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

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

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 が使えない場合でも可能

nameof 演算子と違い、実行時に処理される点が異なる

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();
  }
}
Share