Ich muss den Namen des generischen Typs in Form seiner Deklaration im Code bekommen.
Zum Beispiel: Für Liste & lt; Int32 & gt; Ich möchte String "List & lt; Int32 & gt;" erhalten. Die Standart-Eigenschaft Type.Name gibt in dieser Situation "List'1" zurück.
EDIT: Beispiel wurde behoben
Ok, ich habe einige Nachforschungen angestellt und festgestellt, dass typeof (List) "GetGenericArguments" enthält, mit denen Sie die Unternamen erhalten. Also würde ich es so machen (für einen generischen Typ, wenn es ein Multi ist, wird es eine Schleife oder so etwas nehmen. Ich kann eine Funktion dafür auf Anfrage veröffentlichen.
Hier ist eine Funktion, um es mit mehreren generischen Argumenten zu tun, behandelt 'verschachtelte' generische Typen. Nochmals bearbeitet, um dies mit der Aggregatfunktion zu tun:
%Vor%Das ist nicht zu schwer. ; -)
Okay, ich beiße ... g Der untenstehende arbeitet rekursiv und zeigt primitive Typen ohne Namensraum (wie das OP geschrieben hat):
%Vor% Der resultierende bereinigteName sieht folgendermaßen aus: System.Collections.Generic.Dictionary<System.Collections.Generic.List<Int32>, ConsoleApplication2.Program+SomeType>
Nun, das ist, weil der Name des Typs in .NET tatsächlich List1 ist. Die "1" ist die sogenannte Arität des generischen, und es sagt Ihnen, wie viele Typparameter es gibt.
Es ist erforderlich, damit Sie mehr als einen generischen Typ mit demselben "Namen" aber einer anderen Anzahl von generischen Typparametern erstellen können.
Zum Beispiel gibt es mehr als einen Typ namens "System.Action". Die wirklichen Namen von diesen sind System.Action'1, System.Action'2, System.Action'3 etc.
Wenn Sie also wissen, dass Ihr Typ generisch ist, können Sie davon ausgehen, dass am Ende des Namens "XX" steht, also können Sie diesen Teil einfach wegschneiden, zum Beispiel so:
%Vor%PS: Bitte ersetzen Sie 'mit'.
Tags und Links .net c# reflection