2017-05-03 15 views
0

当我尝试使用Roslyn SyntaxGenerator.IdentifierName为基元类型创建标识符时,它将转义添加到Identifier.TextSyntaxGenerator.IdentifierName转义最低限定基元类型

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

一种IdentifierName()正是一个标识符的该–名称。

你问了一个名为double的标识符,它给了你一个有效的语法。

您需要SpecialType overload

generator.TypeExpression(SpecialType.System_Double) 
+0

的事情是,我从一个ITypeSymbol获取类型的信息,如果我做'generator.GenericName(“IEnumerable的”,typeSymbol)'和typeSymbol恰好是一个基元(例如double),那么通用创建的将是'IEnumerable '。为了清理这个,所以我只是回到'double',我试图做'generator.GenericName(“IEnumerable”,generator.IdentifierName(typeSymbol.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat)))',但这个转义内置关键字。 – LGreenberger

+0

那么,我该如何编写这个,以便打印的类型使用内置类型的关键字或自定义类型的最低限定格式?谢谢! – LGreenberger

+0

我编辑了原文,询问我建议的方式是否可行。 – LGreenberger