我正在尝试从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
答案 0 :(得分:1)
ObjectCreationExpressionSyntax
本身没有符号。您需要从Type
属性中获取符号,该属性返回new
关键字后面的类型的语法节点。