Gibt es im Framework oder irgendwo in den Weiten des Internets eine Methode zur Überprüfung vor MethodInfo.MakeGenericMethod, ob ein Typ die Constraints des jeweiligen Argumentes erfüllt?
Ich habe wenigstens mal die wichtigsten Sachen implementiert, aber für den Rest fange ich einfach ggf. die ArgumentException ab. Wenn es so etwas aber schon fertig gibt, hätte ich natürlich nichts dagegen
.
Code:
protected static bool IsValidParameter(Type source, Type dest)
{
if (dest.IsGenericParameter) {
foreach (Type constraint in dest.GetGenericParameterConstraints())
if (!source.IsInstanceOfType(dest))
return false;
if ((dest.GenericParameterAttributes & GenericParameterAttributes.DefaultConstructorConstraint) != 0 &&
dest.GetConstructor(Type.EmptyTypes) == null)
return false;
if ((dest.GenericParameterAttributes & GenericParameterAttributes.ReferenceTypeConstraint) != 0 &&
dest.IsValueType)
return false;
return true;
} else {
return source.IsInstanceOfType(dest);
}
}