C # Reflexion, unter Verwendung Makegenericmethod mit Verfahren, das die ‚new ()‘ Typen constraint hat

StackOverflow https://stackoverflow.com/questions/2375422

Frage

Ich versuche, die Methodmakegenericmethod wie folgt zu verwenden:

        foreach (var type in types)
        {
            object output = null;
            var method = typeof (ContentTypeResolver).GetMethod("TryConstruct");
            var genmethod = method.MakeGenericMethod(type);
            var arr = new object[] { from, output };
            if ((bool)genmethod.Invoke(null, arr))
                return (IThingy)arr[1];
        }

Vor dem folgenden allgemeinen Verfahren:

    public static bool TryConstruct<T>(string from, out IThingy result) where T : IThingy, new()
    {
        var thing = new T();
        return thingTryConstructFrom(from, out result);
    }

Das Problem, das ich ist, dass ich eine arguement Ausnahme auf der Linie wie der Makegenericmethod Typen bekomme ich vorbei ist nicht "neu ()

Gibt es eine Möglichkeit diese Runde ?? Dank

War es hilfreich?

Lösung

Nein. Sie können nur dann geschlossen, machen konstruiert TryConstruct Methoden mit Typ-Parameter, die die IThingy und new Einschränkungen erfüllen. Andernfalls werden Sie den TryConstruct Vertrag werden der Sieg: Was würde passieren, wenn Sie TryConstruct genannt und es ist genau die new T() Linie? Es würde nicht sein ein T () Konstruktor, so dass Sie Typsicherheit verstoßen würde.

Sie müssen diese Art zu überprüfen, einen öffentlichen Standardkonstruktor hat, bevor es vorbei Makegenericmethod. Wenn Sie instantiate Typen mit einem Nicht-Standard Konstruktor benötigen, müssen Sie eine neue Methode oder eine TryConstruct Überlastung schaffen, vielleicht eine, die Activator.CreateInstance statt new T() verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top