Types Roslyn代码修复提供程序(VS2015):如何获取类属性/字段类型

Types Roslyn代码修复提供程序(VS2015):如何获取类属性/字段类型,types,properties,roslyn,codefixprovider,Types,Properties,Roslyn,Codefixprovider,如何获取属性/字段的数据类型? 我能够做到这一点的唯一方法是在存储类的文档的语法树中进行搜索。它有点慢,还有继承的问题(需要搜索其他文件,而不是其他文件,等等)。 我的解决方案有一个限制:在一个包含多个项目的解决方案中,需要加载所有项目 是否可以执行以下操作: Type mType = Type.GetType("MyNamespace.SampleClass"); 你在找我 您无法从符号中获取System.Type——这是一种反射类型,它是。您必须使用一个INamedTypeSymbol您能

如何获取属性/字段的数据类型? 我能够做到这一点的唯一方法是在存储类的文档的语法树中进行搜索。它有点慢,还有继承的问题(需要搜索其他文件,而不是其他文件,等等)。 我的解决方案有一个限制:在一个包含多个项目的解决方案中,需要加载所有项目

是否可以执行以下操作:

Type mType = Type.GetType("MyNamespace.SampleClass");
你在找我


您无法从符号中获取
System.Type
——这是一种反射类型,它是。您必须使用一个
INamedTypeSymbol

您能否提供一个简短的代码示例,以澄清您到底拥有什么以及您想要的结果是什么?您正在寻找语义模型。我只有类名,没有名称空间(可能与实际的不同)。因此,为了获得SampleClass名称空间,我做了以下操作:ISymbol mCompleteClassName=compilation.getSymbolWithName(x=>x==“SampleClass”)?.FirstOrDefault();INamedTypeSymbol=compilation.GetTypeByMetadataName($“{mCompleteClassName}”);有更好的方法吗?如果您只有类型名,那么可能有多个具有该名称的类。在这种情况下,您的代码将出错——有时选择了错误的类型。您需要类型的完全限定名才能唯一标识它。你能补充一些你想要完成的事情的信息吗?您是如何确定类型名称的?您将如何使用INamedTypeSymbol?
CodeFixContext context = ...
SemanticModel model = await context.Document.GetSemanticModelAsync();
Compilation compilation = model.Compilation;
INamedTypeSymbol symbol = compilation.GetTypeByMetadataName("MyNamespace.SampleClass");