如何确定 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/