[c#] Wie kann ich die korrekte Textdefinition eines generischen Typs mit Reflektion erhalten?



Answers

Eine gute und saubere Alternative, dank @ LukeHs Kommentar , ist

using System;
using System.CodeDom;
using System.Collections.Generic;
using Microsoft.CSharp;
//...
private string GetFriendlyTypeName(Type type)
{
    using (var p = new CSharpCodeProvider())
    {
        var r = new CodeTypeReference(type);
        return p.GetTypeOutput(r);
    }
}
Question

Ich arbeite an der Code-Generierung und stolperte mit Generika. Hier ist eine "vereinfachte" Version dessen, was mich Probleme verursacht.

Dictionary<string, DateTime> dictionary = new Dictionary<string, DateTime>();
string text = dictionary.GetType().FullName;

Mit dem obigen Codeausschnitt ist der Wert von text wie folgt:

 System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, 
 Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.DateTime, mscorlib, 
 Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

(Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt.)

Gibt es eine Möglichkeit, den Typnamen ( type ) in einem anderen Format zu erhalten, ohne die obige Zeichenfolge zu analysieren? Ich wünsche folgendes Ergebnis für den text :

System.Collections.Generic.Dictionary<System.String, System.DateTime>



Ich glaube, du kannst gehen

System.String, mscorlib, Version = 2.0.0.0, Kultur = neutral, PublicKeyToken = b77a5c561934e089

in Type.Parse() . Das ist ein voll qualifizierter Typenname, denke ich.




string text = dictionary.ToString();

bietet fast das, wonach du verlangst:

System.Collections.Generic.Dictionary`2[System.String,System.DateTime]





Related