来自Roslyn的扩展方法信息

时间:2014-12-16 14:34:41

标签: roslyn

我正在尝试使用Roslyn从给定源文件中提取各种方法调用信息。详细说明 - 我想找到输入文件中发生的所有方法调用。

我遇到的一个问题是扩展方法。考虑任何Linq方法,例如AggregateSum等。如何从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 !
    }
}

1 个答案:

答案 0 :(得分:3)

您可以使用IMethodSymbol.ReducedFrom属性找到扩展方法实例调用的实际静态扩展方法。