我試圖從ObjectCreationExpressionSyntax
對象獲取符號信息但失敗。SemanticModel.GetSymbolInfo for ObjectCreationExpressionSyntax返回null
這裏是例子重現該問題:
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);
}
}
GET 「new KeyValuePair<TKey, TValue>(kvp.Key.Target, kvp.Value)
」 符號失敗 但使用羅斯林語法展示臺可以得到它。
我寫了一個方法,例如。
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
根據https://github.com/dotnet/roslyn/issues/3825在這種情況下,GetDeclaredSymbol應該返回null,而返回null的GetSymbolInfo似乎是一個錯誤。 'GetPreprocessingSymbolInfo'可能有自己的故事。 – Grault