2

宣言的な方法 (AOP、リフレクションなど) でメソッド名を取得できるようにする必要性を見つけて、コンパイラのチェックによって破壊的な変更などが強制されるようにする。良い例:

invocation.Method.Name.Equals("GetAll"

..ラムダ/ジェネリックメソッドのようにこれを行う方法があるので、メソッド名を文字列リテラルとして配置する必要はありませんか? プロパティ名を取得するために、以前に次のようなものを使用しました。

    public static string GetPropertyName<T, P>(Expression<Func<T, P>> propSelector)
        where T : class
    {
        return (propSelector.Body as MemberExpression).Member.Name;
    }

..しかし、メソッドに対して同じことを行う信頼できる簡単な方法はありますか?

4

1 に答える 1

0

デリゲートを使用して、次のようなことを行うことができます。

public static string MethodName(Delegate d) {
    return d.Method.Name;
}

// and to use...
MethodName(new Func<object, int>(Convert.ToInt32));

使用する特定のデリゲート署名がある場合は、特定のオーバーロードを作成できます。

public static string MethodName(Func<object, int> d) {
    return MethodName((Delegate)d);
}

MethodName(Convert.ToInt32);

ジェネリックスをいじってみれば、ジェネリックスで何かできるかもしれません。

于 2011-02-11T13:03:54.853 に答える