gpt4 book ai didi

c# - 从 TypeInfo 对象获取类型的完全限定名称

转载 作者:可可西里 更新时间:2023-11-01 07:52:49 27 4
gpt4 key购买 nike

是否有可能以某种方式获取 TypeInfo 对象中包含的类型的完全限定名称?

在调试器中,许多这些值很好地显示为 System.Int32,但是当它被打印出来时,没有一个包含这个完全限定的名称。我需要将其作为参数提供给 Type.GetType()

var typeInfo = semanticModel.GetTypeInfo(argument);
var w = typeInfo.ToString(); // Microsoft.CodeAnalysis.TypeInfo
var y = typeInfo.Type.ToString(); // int
var z = typeInfo.Type.ToDisplayString(); // int
var a = typeInfo.Type.OriginalDefinition.ToDisplayString(); // int
var b = typeInfo.Type.OriginalDefinition.ToString(); // int
var c = typeInfo.Type.Name; // Int32
var d = typeInfo.Type.MetadataName; // Int32
var e = typeInfo.Type.ToDisplayParts(); // {int}
var f = typeInfo.Type.ContainingNamespace; // System

请注意,这应该适用于每种类型,因此我不能只将命名空间与名称连接起来。

或者:是否有另一种(更适合?)方法来获取确切的类型?

对于上下文:我想检查一个类的类型参数是否包含一些特定的方法。因此,我的方法是从 TypeArgumentListSyntax 获取参数并从每个 TypeSyntax 对象获取 TypeInfo

最佳答案

ToDisplayString 方法允许您传入一个“格式”对象,该对象具有大量选项来控制您希望如何格式化内容:

var symbolDisplayFormat = new SymbolDisplayFormat(
typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces);

string fullyQualifiedName = typeSymbol.ToDisplayString(symbolDisplayFormat);

您获得像“int”这样的关键字是默认格式的原因包括 SymbolDisplayMiscellaneousOptions.UseSpecialTypes 标志,该标志指定将语言关键字用于特殊类型而不是常规名称。

关于c# - 从 TypeInfo 对象获取类型的完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305594/

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