gpt4 book ai didi

c# - Roslyn - 是给定类型的类或子类的 INamedTypeSymbol

转载 作者:行者123 更新时间:2023-11-30 13:54:42 24 4
gpt4 key购买 nike

使用反射,可以非常直接地确定一个对象是否属于给定的类,使用如下所示:

(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 是否有可靠的方法来做到这一点?

最佳答案

在 Roslyn IDE 代码库中,我们使用 this extension method .请注意,您需要注意是只包含基本类型还是还包含接口(interface)。另外,你关心泛型实例化吗?

关于c# - Roslyn - 是给定类型的类或子类的 INamedTypeSymbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com