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
关键字后类型的语法节点。
我正在尝试从 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
关键字后类型的语法节点。