ObjectCreationExpressionSyntax的SemanticModel.GetSymbolInfo返回null

时间:2015-07-03 08:55:17

标签: c# roslyn

我正在尝试从ObjectCreationExpressionSyntax对象获取符号信息但失败了。

以下是重现问题的示例:

public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
    foreach (var kvp in _hm.Where(x => x.Key.IsAlive))
    {
        yield return new KeyValuePair<TKey, TValue>(kvp.Key.Target, kvp.Value);
    }
}

获取“new KeyValuePair<TKey, TValue>(kvp.Key.Target, kvp.Value)”符号失败 但使用Roslyn语法Visualizer可以得到它。

我写了一个方法,例如

public static T GetRawSymbol<T>(SemanticModel semanticModel, SyntaxNode syntax) where T : class, ISymbol
    {
        var symbol = semanticModel.GetSymbolInfo(syntax).Symbol;
        if (symbol == null)
            symbol = semanticModel.GetDeclaredSymbol(syntax);
        if (symbol == null)
        {
            symbol = semanticModel.GetPreprocessingSymbolInfo(syntax).Symbol;
        }
        if (symbol == null)
            return symbol as T;
        else
            return symbol.OriginalDefinition as T;
    }

GetSymbolInfo, GetDeclaredSymbol, GetPreprocessingSymbolInfo都返回null

1 个答案:

答案 0 :(得分:1)

ObjectCreationExpressionSyntax本身没有符号。您需要从Type属性中获取符号,该属性返回new关键字后面的类型的语法节点。