Feedback

C# - Reflection-Type vereinfachen

Veröffentlicht von am 02.04.2013
(1 Bewertungen)
Wenn man einen Generischen Typ per reflektion abfragt dann bekommt man aus der FullName-Eigenschaft oftmals noch Versionsnummer usw. mitgeliefert. Das braucht man häufig aber nicht.

Angenommen wir haben eine Eigenschaft mit folgendem Typ deklariert und kompiliert:
Dictionary<List<string>, Dictionary<List<int>, List<double>>>


Daraus wird dann:
System.Collections.Generic.Dictionary`2[[System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.Dictionary`2[[System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.List`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]


Das folgende Snippet erzeugt Namen die in etwa folgendermaßen aussehen:
System.Collections.Generic.Dictionary`2[System.Collections.Generic.List`1[System.String],System.Collections.Generic.Dictionary`2[System.Collections.Generic.List`1[System.Int32],System.Collections.Generic.List`1[System.Double]]]


Diese können nach wie vor über CodeDomProvider in bspws. C# Code konvertiert werden.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

        private string GetSimpleTypeString(Type t)
        {
            Type[] ts = t.GetGenericArguments();
            StringBuilder sb = new StringBuilder();
            sb.Append(t.FullName.Split('`').First());
            if (ts.Length > 0)
            {
                sb.Append("`");
                sb.Append(ts.Length);
                sb.Append("[");
                for (int i = 0; i < ts.Length; ++i)
                {
                    sb.Append(GetSimpleTypeString(ts[i]));
                    if (i < ts.Length - 1)
                        sb.Append(",");
                }
                sb.Append("]");
            }
            return sb.ToString();
        }
Abgelegt unter Reflection, Reflektion, Type, IL, Code.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!