5 Stimmen

Generische Sammlungen Typentest

Ich möchte einige Operationen nach einem bestimmten Sammlungstyp (mit Reflexion), unabhängig von der generischen Typ machen.

Hier ist mein Code:

    void MyFct(Type a_type)
    {
        // Check if it's type of List<>
        if (a_type.Name == "List`1")
        {
            // Do stuff
        }
        // Check if it's type of Dictionary<,>
        else if (a_type.Name == "Dictionary`2")
        {
            // Do stuff
        }
    }

Im Moment funktioniert es, aber mir wird klar, dass dies nicht die sicherste Lösung ist.

    void MyFct(Type a_type)
    {
        // Check if it's type of List<>
        if (a_type == typeof(List<>))
        {
            // Do stuff
        }
        // Check if it's type of Dictionary<,>
        else if (a_type == typeof(Dictionary<,>))
        {
            // Do stuff
        }
    }

Das habe ich auch versucht, es kompiliert zwar, aber es funktioniert nicht... Ich habe auch versucht, alle Schnittstellen des gegebenen Sammlungstyps zu testen, aber das impliziert eine Exklusivität für Schnittstellen in Sammlungen...

Ich hoffe, ich habe mich klar ausgedrückt, mein Englisch ist unzureichend :)

10voto

Tejs Punkte 39916

Wenn Sie sehen wollen, ob etwas einen bestimmten generischen Typ implementiert, dann müssen Sie dies tun:

if(a_type.IsGenericType && a_type.GetGenericTypeDefinition() == typeof(List<>))

Le site GetGenericTypeDefinition() Methode gibt den unbeschränkten generischen Typ zurück, gegen den Sie testen können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X