C # Reflexion, unter Verwendung Makegenericmethod mit Verfahren, das die ‚new ()‘ Typen constraint hat
-
24-09-2019 - |
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
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.