- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一些测试,我需要获得一个 ITypeSymbol。这是我的做法:
private async Task<ITypeSymbol> GetTypeSymbol(string file, TextSpan span)
{
var code = File.ReadAllText(file);
var tree = CSharpSyntaxTree.ParseText(code);
var compilation = CSharpCompilation.Create(
this.GetType().Assembly.GetName().Name,
syntaxTrees: new[] { tree },
references: new[]
{
MetadataReference.CreateFromAssembly(typeof(object).Assembly))
});
var model = compilation.GetSemanticModel(tree);
var root = await tree.GetRootAsync().ConfigureAwait(false);
return model.GetTypeInfo(root.FindNode(span)).Type;
}
出于某种原因,最后一行的 Type 属性始终为 null,即使我从如下所示的文件中传入代码也是如此:
public class AClass { }
明确地说,文件读取正常,解析正确,编译已创建,我可以获得模型,FindNode() 将找到我正在寻找的正确 ClassDeclarationSyntax 节点。 GetTypeInfo() 返回一个值,但 Type 和 ConvertedType 均为 null。我有点期待这实际上应该有值(value)。我的期望是否正确?如果是这样,我做错了什么,Type 属性为 null?
最佳答案
实际上,GetDeclaredSymbol() ( How to get module ancestor in roslyn semanticmodel?) 似乎是可行的方法。效果很好。
关于c# - 为 ITypeSymbol 取空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279379/
我有一个类型参数值的字典: ImmutableDictionary typeParameterValues; 我如何使用 ITypeSymbol 替换这些类型参数: 例如。 List -> List
今天与 Roslyn 合作时,我偶然发现了 StaticConstructors ITypeSymbol 的属性,声明为 ImmutableArray但据我所知,在 C# 和 VB 中最多只能有一个静
我正在尝试编写一个 Roslyn 分析器来检测在数组上调用 Enumerable.Count() 的用法。这是我的分析器中的相关代码: public override void Initialize(
我可以像这样使用SyntaxGenerator 生成Int32 类型的参数... var generator = SyntaxGenerator.GetGenerator(document); var
我正在编写一些测试,我需要获得一个 ITypeSymbol。这是我的做法: private async Task GetTypeSymbol(string file, TextSpan spa
我在解决方案中有 2 个测试项目。 第一个项目(“VDoc”)声明 VDocQuery 类型。 第二个项目(“VDocQueryTest”)调用 VDocQuery 构造函数。 我得到 2 个 VDo
我正在使用 Roslyn-CTP 进行一些试验。 目前我正在尝试将 var 替换为具体类型。 var i=1; 应该变成: int i=1; 找出推断的类型很容易。但是由于这部分发生在语义模型中,我得
我如何检查 ITypeSymbol实例指的是委托(delegate)类型(如 Action 或 Func )。 我想我可以检查基类型是否为 System.Delegate .这是这样做的正确方法还是有
我如何检查 ITypeSymbol实例指的是委托(delegate)类型(如 Action 或 Func )。 我想我可以检查基类型是否为 System.Delegate .这是这样做的正确方法还是有
我需要检查一个 ITypeSymbol 以查看它是否可序列化。 ITypeSymbol 上没有IsSerializable 属性,也没有我在 Compiler API 中知道的扩展方法可以执行此操作,
我试图可靠地比较 ITypeSymbol 的两个实例,在以下情况下可能是最简单和最直接的方法(我在一个更大的项目中遇到了这些问题,并试图尽可能地简化它可能): 我有一个 CSharpCompilati
我已经成功地从 SyntaxNode 接收到一个 ITypeSymbol,方法是: SemanticModel.GetTypeInfo(sytaxNode).ConvertedType 现在我想知道这
我是一名优秀的程序员,十分优秀!