Frage

habe ich eine MethodInfo eines GenericMethodDefinition. Wie zum Beispiel: CallMethod<T>(T arg, string arg2). Die GetParameters () Methode gibt mir zwei Parameterinfo-Objekte, von denen die ersten generisch ist, ist die zweite, von denen nicht. Wie kann ich mich Parameterinfo zu sagen, es ist generisch? Was ist, wenn es hat Einschränkungen?

War es hilfreich?

Lösung

Überprüfen Sie ParameterType.IsGenericParameter.
Sie können auch prüfen ContainsGenericParameters wollen, die für so etwas wie MyMethod<T>(List<T> param) wahr sein wird. (Auch wenn List<> ist nicht ein allgemeiner Parameter)

Wenn IsGenericParameter wahr ist, können Sie auch GetGenericParameterConstraints() rufen Schnittstelle oder Basistyp Einschränkungen zu erhalten, und Sie können GenericParameterAttributes überprüfen (a [Flags] Enumeration) für new(), struct oder class Einschränkungen.

Andere Tipps

Ich glaube, Sie für diese suchen:

parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()

Zusätzlich zu anderen Antwort auf die zweite Frage: Ja, wir können die Einschränkungen von ParameterInfo mit GetGenericParameterConstraints() bekommen, aber es funktioniert nicht für alle Umstände. Betrachten wir einige generische Methode wie folgt:

public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}

Es gibt eine Einschränkung für diese Methode, aber das Verfahren nicht über Parameter (man denke etwa Enumerable.Cast ). Was werde ich sagen, ist die Einschränkung nicht Teil der Parameter ist, aber die Methode selbst. Wir können die Einschränkungen erhalten durch:

method.GetGenericArguments()[0].BaseType  //the constraint of T
method.GetGenericArguments()[1].BaseType  //that of V: Object

Vielleicht hier Sie finden Informationen über reflektierende allgemeine Parameter ...

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