2017-05-03 5 views
0

Wenn ich versuche, einen Bezeichner unter Verwendung der Roslyn SyntaxGenerator.IdentifierName für einen primitiven Typ zu erstellen, fügt er einen Escape-Wert zur Identifier.Text hinzu.SyntaxGenerator.IdentifierName gibt minimal qualifizierte primitive Typen frei

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); 

Haben Sie Ideen, wie Sie den Typidentifikator erstellen können, ohne dass er maskiert wird?

Edit:

Wäre dies eine gültige Weise zu testen?

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

Antwort

1

Ein IdentifierName() ist genau der – der Name eines Bezeichners.

Sie haben nach einem Bezeichner mit dem Namen double gefragt, und es gab Ihnen eine gültige Syntax dafür.

Sie benötigen die SpecialType overload:

generator.TypeExpression(SpecialType.System_Double) 
+0

Die Sache ist, dass ich die Art von Informationen von einem ITypeSymbol bin immer und wenn ich 'generator.GenericName („IEnumerable“, typeSymbol)' und die typeSymbol passiert zu sein ein Primitiv (zum Beispiel doppelt), dann wird das erzeugte generische 'IEnumerable 'sein. Um das zu bereinigen, bekomme ich einfach 'double' zurück, ich habe versucht,' generator.GenericName ("IEnumerable", generator.IdentifierName (typeSymbol.ToDisplayString (SymbolDisplayFormat.MinimallyQualifiedFormat))) '' zu schreiben, aber dies vermeidet integrierte Schlüsselwörter. – LGreenberger

+0

Also wie schreibe ich das, so dass der gedruckte Typ das Schlüsselwort eines eingebauten Typs oder das minimal qualifizierte Format eines benutzerdefinierten Typs verwendet? Vielen Dank! – LGreenberger

+0

Ich habe den ursprünglichen Post bearbeitet, um zu fragen, ob mein vorgeschlagener Weg das zu schaffen macht. – LGreenberger

Verwandte Themen