Это довольно элементарный вопрос, но я никогда раньше не делился с дженериками, и я оказался в необходимости использовать его. К сожалению, у меня нет времени прямо сейчас, чтобы пройти какие-либо учебники, и ответы, которые я нашел связанным с ними, до сих пор не могут быть названы базовыми, поэтому мы идем:Использование списка <T> в C# (Generics)
Предположим, у меня есть следующее:
List<MyClass1> list1 = getListType1();
List<MyClass2> list2 = getListType2();
if (someCondition)
MyMethod(list1);
else
MyMethod(list2);
И конечно
void MyMethod(List<T> list){
//Do stuff
}
Ну, я думал, что это будет так просто, но, видимо, это не так. VS предупреждает меня, что
Аргументы типа для метода MyMethod (System.Collections.Generic.List) не могут быть выведены из эксплуатации
и если я скомпилировать его в любом случае, я получаю
Тип или пространство имен имя «Т» не может быть найден
ошибку.
В многочисленных ответах, которые я нашел, я читал, что я должен объявить, что такое T
, что имеет смысл, но я не мог понять, как это сделать в таком упрощенном сценарии. Конечно, эти ответы породили еще больше вопросов, но сейчас я просто хочу объяснить, что я делаю неправильно (кроме того, не изучая дженерики) и как сделать все правильно.
Для одного убедитесь, что у вас есть using System.Collections.Generic; включен. –
Это не то, как работают дженерики. 'MyMethod (Список)) - недопустимая сигнатура метода (если ваш класс не является общим классом с параметром типа T) –
У' MyClass1' и 'MyClass2' есть некоторый общий базовый тип или интерфейс? Разделяют ли они много общих свойств или методов? –