使用反射,一類或子類的INamedTypeSymbol它非常簡單,以確定對象是否是給定類的,使用這樣的事情:羅斯林 - 是一個給定類型
(t == typeof(MyClass)) || (typeof(MyClass).IsAssignableFrom(t))
我想想出如何在Roslyn的代碼分析API中做同樣的事情。我正在使用這樣的循環,試圖在解決方案中查找所有局部變量聲明。
foreach (var decl in rootNode.DescendantNodes().OfType<LocalDeclarationStatementSyntax>())
{
var symbolInfo = semanticModel.GetSymbolInfo(decl.Declaration.Type);
var typeInfo = symbolInfo.Symbol as INamedTypeSymbol;
if (typeInfo == null)
{
continue;
}
// WHAT DO?
}
我最終試圖建立它們是給定類型的,或者是給定類型的子類的所有變量的列表。很容易看到我可以如何將變量類型的名稱與我正在尋找的已知類型的名稱進行比較 - 但我也需要處理子類的情況。
有沒有一個強大的方式與Roslyn做到這一點?
如果你想處理泛型,這變得非常複雜。 – SLaks