私はかなり単純なことをしようとしていますが、単に自分のクラスのダミー インスタンスを作成する方法があるかどうかはわかりません。
簡単なコードを使用して、非静的メソッドのメソッド名を簡単に取得しようとしています:
static string GetMethodName(Func<string, int> function )
{
return function.Method.Name;
}
しかし、私は MyStaticMethod からこれを呼び出そうとしていますが、もちろんそれは不平を言っています:
private static void MyStaticMethod()
{
var a = GetMethodName(MyNonStaticMethod);
}
private int MyNonStaticMethod(string param1)
{
return 0;
}
含まれているクラスのダミーインスタンスを作成せずにこれを達成する方法はありますか? 明らかに私のケースはより複雑であり、単純に非静的メソッドを静的にすることはできません (インスタンスが必要であり、依存バインディングがあります)。必要なのは名前だけなので、これが可能かどうか疑問に思っています(実際にはインスタンスは必要ありません)。私は魔法の文字列から離れようとしており、物事が変化したときにコンパイル時のエラーが発生したいと考えています。
編集: 静的ヘルパー クラスを作成しました
私は一般的な方法を持っています:
public static string GetMemberName<T>(
Expression<Func<T, object>> expression)
{
if (expression == null)
{
throw new ArgumentNullException("expression");
}
return _GetMemberName(expression.Body);
}
private static string _GetMemberName(
Expression expression)
{
if (expression is MemberExpression)
{
var memberExpression =
(MemberExpression)expression;
return memberExpression.Member.Name;
}
if (expression is MethodCallExpression)
{
var methodCallExpression = (MethodCallExpression)expression;
return methodCallExpression.Method.Name;
}
if (expression is UnaryExpression)
{
var unaryExpression = (UnaryExpression)expression;
return GetMemberName(unaryExpression);
}
throw new ArgumentException("Unrecognized expression");
}