Здравствуйте, Sinix, Вы писали:
Там еще одна особенность
public static bool ПодходитДженерикПараметр(Type ДженерикТип, Type тип)
{
var TI = ДженерикТип.GetTypeInfo();
if (ДженерикТип.IsConstructedGenericType && TI.ContainsGenericParameters)
return тип.IsGenericTypeOf(TI, ДженерикТип);
if (!TI.IsGenericParameter) return false;
bool ЕстьОграничения = false;
Type[] tpConstraints = TI.GetGenericParameterConstraints();
foreach (Type tpc in tpConstraints)
{
ЕстьОграничения = true;
var tpcTI = tpc.GetTypeInfo();
if (tpcTI.ContainsGenericParameters)
{
if (ПодходитДженерикПараметр(tpc,тип)) return true;
}
else if (tpc.IsAssignableFrom(тип)) return true;
}
if (ЕстьОграничения) return false;
return ПроверитьПараметрНаОграничения(TI, тип.GetTypeInfo());
}
Есть типы которые содержат ограничения и для них
TI.GetGenericParameterConstraints() будет возвращать истину
а
IsConstructedGenericType ложь