У меня есть метод, он не имеет никаких параметров T.C# typeof применяется к универсальному параметру supertype
К сожалению, оператор C# typeof не работает с генераторами, как показано ниже.
public static string ToString(object obj)
{
if (obj.GetType() == typeof(List<object>))
{
return "Bug: Never called";
}
if (obj.GetType() == typeof(List<int>))
{
return "Method only works for int lists";
}
return "";
}
Ожидаемый результат: ToString (List of ints) вернет «Ошибка: никогда не был вызван».
Фактический выход: «Метод работает только для списков Int»
Это работает прекрасно в Java. Вы скажете, что дженерики в C# не поддерживают это. Как я могу реструктурировать свой код, чтобы заставить метод «ToString (object)» использовать список объектов?
Требования: Вы не можете изменить подпись метода, а только его реализацию.
К сожалению, вы не можете реализовать класс «int» с интерфейсом. Поскольку класс int был написан Microsoft. Поэтому я не могу добавить шаблон посетителя в тип int.
Почему вы ожидаете 'List' return 'Bug: Never Called, который является веткой для 'List
Я не понимаю, почему вы ожидаете, что тип 'List' объект будет 'List
Поскольку объект является суперклассом int. Я думал, что объект также «захватывает» int. – user2186597