Die korrekte Methode, um den Basisnamen eines generischen Typs in .NET zu erhalten, ist durch Substring?

8

Wenn ich das habe:

%Vor%

Wie bekomme ich "System.Collections.Generic.Dictionary" als String? Ist der beste / einzige Weg, dies zu tun:

%Vor%

Scheint mir aber irgendwie hackisch.

Der Grund, warum ich das möchte, ist, dass ich ein Objekt Type nehmen und Code erzeugen möchte, der dem in einer C # Quellcodedatei gefundenen Code ähnlich ist. Ich produziere einige Textvorlagen, und ich muss Typen als Zeichenfolgen in die Quelle einfügen, und die FullName -Eigenschaft erzeugt etwa Folgendes:

%Vor%

statt was ich will:

%Vor%

Bearbeiten : Ok, hier ist der endgültige Code, scheint mir immer noch ein bisschen wie ein Hack, aber es funktioniert:

%Vor%     
Lasse Vågsæther Karlsen 30.08.2009, 16:42
quelle

4 Antworten

6

Sie können CodeDom verwenden, um eine "normalere" C # -Stil-Deklaration zu erstellen.

%Vor%

Der obige Code hat die folgende Ausgabe:

%Vor%

Das sollte Ihnen das meiste von dem bringen, was Sie wollen, ohne einen benutzerdefinierten Code für die Textzeichnung.

    
bobbymcr 30.08.2009, 17:44
quelle
7

Das Problem ist, dass Sie eine sprachspezifische Notation wünschen, in diesem Fall C #.

%Vor%

Vielleicht können Sie einen Sprachdienst anrufen, um die gewünschte Zeichenfolge zu erhalten, aber Sie sollten die Zeichenfolge wahrscheinlich selbst erstellen.

    
JohannesH 30.08.2009 17:00
quelle
3

Ist das näher an dem, wonach Sie suchen?

Es verwendet CodeTypeReferenceExpression und benötigt keine weiteren Substring oder Replace ruft auf:

%Vor%     
LukeH 01.09.2009 15:46
quelle
2

AFAIK Die interne Notation für Generika verwendet die 'x-Notation, um die Anzahl der Typparameter für den generischen Typ anzugeben. I.e. 2 gibt an, dass das Dictionary zwei Arten benötigt, um es zu schließen. Es ist die gleiche Notation wie ILDasm und Reflection.

    
Brian Rasmussen 30.08.2009 16:48
quelle

Tags und Links