Re[2]: Сравнение System.Type
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.09.16 13:01
Оценка:
Здравствуйте, 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 ложь
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.