SyntaxGenerator.IdentifierName 转义最低限度限定的原始类型

SyntaxGenerator.IdentifierName escapes minimally qualified primitive types

当我尝试使用 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);

知道如何在不转义的情况下创建类型标识符吗?

编辑:

这是一种有效的测试方法吗?

var typeExp = typeSymbol.SpecialType == SpecialType.None
    ? _generator.IdentifierName(typeSymbol.ToDisplayString(symbolDisplayFormat));
    : _generator.TypeExpression(typeSymbol.SpecialType)
var generic = _generator.GenericName("IEnumerable", typeExp);

IdentifierName() 就是一个标识符的名称。

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

您需要 SpecialType overload:

generator.TypeExpression(SpecialType.System_Double)