Мне нужно объединить два разных метода печати в один. У меня есть два общих класса и мой собственный общий класс списка. скажем, у меня есть
static void Print(string fv, MyListClass<Module> A,
string top)
and static void Print2(string fv, MyListClass<Student> A,
string top)
Внутри метода то же самое, но как сделать их одним методом, и в основном классе я выбираю в параметрах, какой список классов я печатаю, модуль или студент. Мои данные находятся в:
MyListClass<Student> Stud;
MyListClass<Module> Mod;
В этом случае он не может найти мои методы MyListClass
Хорошо, тогда как насчет Print<T>(string fv, MyListClass<T> A, string top)
?
Если Module
и Student
не имеют общих членов, почему у них вообще должен быть какой-то общий метод, который их обрабатывает? Сказав, что эти дженерики предназначены для - ну - всего, что является распространено. Если это не так, не используйте дженерики.
@LasseVågsætherKarlsen Да, я уже подумал об этом из вашего первого примера, спасибо.
@HimBromBeere У них есть некоторые общие поля
Для этого вы просто создаете базовый класс, наследуете от него класс Module и Student, а затем используете базовый класс в сигнатуре единственного метода.
I have two
genericclasses and my own generic list class.
Почему у вас есть собственный класс списка? Вы вообще не должны. Предполагая, что он реализует IEnumerable<T>
:
Пусть и Module
, и Student
реализуют общий интерфейс со свойствами, которые вы хотите напечатать, скажем, IPrintable
:
public interface IPrintable
{
string Name { get; }
string Description { get; }
}
public class Module : IPrintable { ... }
public class Student : IPrintable { ... }
Теперь создайте метод с общим параметром:
void Print<T>(string fv, IEnumerable<T> A, string top)
where T : IPrintable
{
foreach (var item in A)
{
Console.WriteLine(item.Name + ": " + item.Description);
}
}
Print<T>(string fv, T A, string top)
?