gpt4 book ai didi

c# - 为 ITypeSymbol 取空

转载 作者:太空狗 更新时间:2023-10-30 01:34:32 26 4
gpt4 key购买 nike

我正在编写一些测试,我需要获得一个 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/

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