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]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

        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!