0

次のコードが与えられます。

public static class Simulate
{
    public static bool Boolean(bool b)
    {
        return b;
    }

}

式がこの静的関数を使用しているかどうかを確認したかったのです。コードをよりリファクタリングしやすいものにするために、文字列型のリフレクションを避けたかったので、これと同様に次のことを実行しようとしています。次のコードを試しました。

protected virtual Expression VisitMethodCall(MethodCallExpression m)
{

    if (m.Method == Simulate.Boolean)

しかし、それはうまくいかないので、私はこれを試しました:

Expression<Action> fb = () => Simulate.Boolean(true);

string booleanName = fb.Body.ToString();

if (m.Method.DeclaringType == typeof(Simulate))
{
     if (m.Method.Name == booleanName)

ただし、予想どおり、上記のコードはBoolean(true)を返します。しかし、ブール文字列しか取得できない方法はありますか?

4

1 に答える 1

2

MethodInfo式の本体からアクセスし、その名前にアクセスすると、文字列ブール値が返されます。

Expression<Action> fb = () => Simulate.Boolean(true);

var call = fb.Body as MethodCallExpression;

if (call != null)
    Console.WriteLine (call.Method.Name); //prints "Boolean" as a string
于 2013-03-22T09:49:40.780 に答える