C# SyntaxGenerator.IdentifierName转义最小限定的基元类型

C# SyntaxGenerator.IdentifierName转义最小限定的基元类型,c#,roslyn,roslyn-code-analysis,C#,Roslyn,Roslyn Code Analysis,当我尝试使用RoslynSyntaxGenerator.IdentifierName为基元类型创建标识符时,它会向identifier.Text添加转义 var generator = SyntaxGenerator.GetGenerator(document); // genericTypeArg.Identifier.ValueText = "@double" var genericTypeArg = generator.IdentifierName("double"); // gene

当我尝试使用Roslyn
SyntaxGenerator.IdentifierName
为基元类型创建标识符时,它会向
identifier.Text
添加转义

var generator = SyntaxGenerator.GetGenerator(document);

// genericTypeArg.Identifier.ValueText = "@double"
var genericTypeArg = generator.IdentifierName("double");

// generic.Identifier.ValueText = "IEnumerable<@double>"
var generic = generator.GenericName("IEnumerable", genericTypeArg);
IdentifierName()
就是标识符的名称

您请求一个名为
double
的标识符,它为您提供了一个有效的语法

您需要:


问题是,我正在从一个ITypeSymber获取类型信息,如果我使用
generator.GenericName(“IEnumerable”,typeSymbol)
,并且typeSymbol恰好是一个原语(例如双精度),那么创建的泛型将是
IEnumerable
。为了解决这个问题,所以我只需返回
double
,我尝试执行
generator.GenericName(“IEnumerable”,generator.IdentifierName(typeSymbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat))
,但这会转义内置关键字。那么我如何编写它,以便打印的类型使用内置类型的关键字或自定义类型的最低限定格式?谢谢我编辑了原始帖子,想问我建议的方法是否可行。@LGreenberger:你应该只使用非原语类型名,然后使用简化器自动简化。
var typeExp = typeSymbol.SpecialType == SpecialType.None
    ? _generator.IdentifierName(typeSymbol.ToDisplayString(symbolDisplayFormat));
    : _generator.TypeExpression(typeSymbol.SpecialType)
var generic = _generator.GenericName("IEnumerable", typeExp);
generator.TypeExpression(SpecialType.System_Double)