SyntaxGenerator.IdentifierName转义最低限定的基本类型

时间:2017-05-03 18:19:19

标签: c# roslyn roslyn-code-analysis

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

1 个答案:

答案 0 :(得分:1)

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

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

您需要SpecialType overload

generator.TypeExpression(SpecialType.System_Double)