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);
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
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
Ich habe den ursprünglichen Post bearbeitet, um zu fragen, ob mein vorgeschlagener Weg das zu schaffen macht. – LGreenberger