在this page以下代码建议查找从给定类型派生的类,但此代码不起作用,因为跟随行
var symbol = _model.GetDeclaredSymbol(node);
返回ISymbol,而不是预期的INamedTypeSymbol。
关于this page上常见问题解答的答案,为获取变量声明的类型,建议使用以下代码。但是,这也会在运行时抛出一个异常,说对ILocalSymbol的强制转换是无效的。
var type = ((ILocalSymbol)model.GetDeclaredSymbol(variableDeclarator)).Type;
我尝试查看Roslyn源代码以找出方法并试用它们,但到目前为止还没有成功。
我想要做的是,检测从EntityFramework的DbContext类派生的解决方案中的所有类。有人能建议我找到这个吗?提前致谢!
答案 0 :(得分:2)
想出出了什么问题。也许会帮助别人不要浪费太多时间。
Microsoft.CodeAnalysis命名空间中的ModelExtensions类具有名称为GetDeclaredSymbol的方法声明。需要调用的方法是名称空间Microsoft.CodeAnalysis.CSharp中的类CSharpExtensions中的方法。如果您已经在类中使用了Microsoft.CodeAnalysis的using语句,则会调用ModelExtensions上的GetDeclaredSymbol方法,这就是我的情况。花了我时间弄清楚。
CSharpExtensions类中的此方法是应该调用的方法:
public static INamedTypeSymbol GetDeclaredSymbol(
this SemanticModel semanticModel,
BaseTypeDeclarationSyntax declarationSyntax,
CancellationToken cancellationToken = default(CancellationToken));