c# - 确定 MethodInfo 是否表示 lambda 表达式

标签 c# reflection lambda

如何确定 MethodInfo 是否表示 lambda 表达式的元数据?

最佳答案

我认为你在谈论匿名方法。因此,你可以为此编写一个扩展方法并检查该方法的名称是否包含任何无效字符。因为编译器生成的方法包含无效字符,你可以使用该功能来判断方法是否匿名:

public static bool IsAnonymous(this MethodInfo method)
{
     var invalidChars = new[] {'<', '>'};
     return method.Name.Any(invalidChars.Contains);
}

测试:

Func<int> f = () => 23;

Console.Write(f.Method.IsAnonymous());  // true

更优雅的方法是使用 IsValidLanguageIndependentIdentifier 方法验证方法名称,如下所示(来自 this 答案的方法):

public static bool IsAnonymous(this MethodInfo method)
{
    return !CodeGenerator.IsValidLanguageIndependentIdentifier(method.Name);
}

请记住,为了访问 IsValidLanguageIndependentIdentifier 方法,您需要包含 System.CodeDom.Compiler 命名空间。

关于c# - 确定 MethodInfo 是否表示 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228075/

相关文章:

c# - 在相似类之间进行比较/复制的简洁方法

lambda - Kotlin:命名 lambda 参数的用途是什么?

c# - 我可以制作一个将任意表达式作为参数并调用它的实用程序方法吗?

c# - Visual Studio 2013 ADO.net 实体模型没有 Oracle 数据源

c# - 以可变速度找到目标时间

ios - 如何在 swift(反射/镜像)中动态找到属性的类型?

java - 如何在功能接口(interface)/lambda 调用中传递 Object 对象

c# - HttpClientFactory 任务取消异常 : Unable to read data from the transport connection

c# - AutomationElement 还活着?

.net - 如何从 .net 中的数组类型获取数组项类型