Feedback

C# - Reflection-Type vereinfachen

Veröffentlicht von am 4/2/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.
        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!