LINQ 是否可以通过 LINQ 表达式树获取没有返回类型的方法名称?

标签 linq tree get properties expression

我知道可以检索具有返回类型的属性名称或方法。但是是否也可以通过 LINQ 表达式树获得没有返回类型的方法名称?

示例:字符串方法名 = GetMethodname(x=>x.GetUser());

---> 结果:“GetUser”

最佳答案

当然 - 但您需要这样的方法签名:

public static string GetMethodName<T>(Expression<Action<T>> action)

(这意味着您需要在调用它时指定类型参数,以便使用 lambda 表达式。)

示例代码:

using System;
using System.Linq.Expressions;

class Test
{
    void Foo()
    {
    }

    static void Main()
    {
        string method = GetMethodName<Test>(x => x.Foo());
        Console.WriteLine(method);
    }

    static string GetMethodName<T>(Expression<Action<T>> action)
    {
        MethodCallExpression methodCall = action.Body as MethodCallExpression;
        if (methodCall == null)
        {
            throw new ArgumentException("Only method calls are supported");
        }
        return methodCall.Method.Name;
    }
}

关于LINQ 是否可以通过 LINQ 表达式树获取没有返回类型的方法名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524290/

相关文章:

c# - 谁能解释一下以下两个查询的区别?

javascript - 使用 javascript 动态生成树

jsf - 如何使用 JSF2 获取 GET 参数?

algorithm - 从二维 kd 树中删除元素

Python 从 JSON 文件创建树

php - 如何使用 php 表单将 GET 变量添加到当前页面 url 的末尾?

javascript - 如何使 Bootstrap Tour 应用 GET 参数

c# - 如何从属性 = 某个值的 UIElementCollection 中选择一个子项?

c# - TrueForAll 方法如何工作? C# 联机

c# - XElement.Load 和 XDocument.Load 之间有什么区别?