Я получил классный метод here, чтобы проверить, получен ли тип от другого. Пока я был рефакторинг кода, я получил этот кусок GetBlah
.Понимание этой функции, которая возвращает объект типа
public static bool IsOf(this Type child, Type parent)
{
var currentChild = child.GetBlah(parent);
while (currentChild != typeof(object))
{
if (parent == currentChild)
return true;
if(currentChild.GetInterfaces().Any(i => i.GetBlah(parent) == parent))
return true;
if (currentChild.BaseType == null)
return false;
currentChild = currentChild.BaseType.GetBlah(parent);
}
return false;
}
static Type GetBlah(this Type child, Type parent)
{
return child.IsGenericType && parent.IsGenericTypeDefinition
? child.GetGenericTypeDefinition()
: child;
}
У меня возникли проблемы с пониманием того, что делает GetBlah
и, следовательно, не может дать ему имя. Я имею в виду, что могу понять тернарное выражение как таковое и функцию GetGenericTypeDefinition
, но я, похоже, не получаю его использования в методе IsOf
, особенно аргумент parent
, который передается. Может ли кто-нибудь выяснить, что на самом деле возвращает метод GetBlah
?
Bonus: Предложите мне меткое имя метода :)
Похоже, если оба родителя ребенка и дженерики, но разных типов ('' Список против '' Список для пример) метод предназначен для создания одного и того же родового типа ('List <>'), чтобы их можно было сравнить более корректно. –
Patashu
и какая теперь разница с методом 'Type.IsAssignableFrom' ?! – user287107
Я уже ответил на ваш вопрос о методе GetBlah, но что вы пытаетесь сделать? Существует уже метод 'Type.IsAssignableFrom'. Вы также хотите знать, выводится ли 'List' из 'List <>'? Если вам нужна помощь в этом, отправьте второй вопрос (и дайте мне комментарий с новой ссылкой!) :) –