SemanticModel.GetSymbolInfo ObjectCreationExpressionSyntax returns 空

SemanticModel.GetSymbolInfo for ObjectCreationExpressionSyntax returns null

我正在尝试从 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 Syntax Visualizer 可以得到它。

我写一个方法,eg.

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都是return null

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