我正在尝试使用Roslyn从给定源文件中提取各种方法调用信息。详细说明 - 我想找到输入文件中发生的所有方法调用。
我遇到的一个问题是扩展方法。考虑任何Linq
方法,例如Aggregate
,Sum
等。如何从InvocationExpressionSyntax
中找出被调用的方法是扩展方法而不是简单的成员方法上课。
我输入的源文件可以编译 - 这意味着GetDiagnostics()
不会有任何错误。
---- @Kevin在答案中提到的一些代码 -
var methodInfo = model.GetSymbolInfo(invocation);
if (methodInfo.Symbol != null)
{
var mSymbol = (IMethodSymbol)methodInfo.Symbol;
if (mSymbol.ReducedFrom != null)
{
// this is an extension method !
}
}
答案 0 :(得分:3)
您可以使用IMethodSymbol.ReducedFrom
属性找到扩展方法实例调用的实际静态扩展方法。