Имеется два класса:
public class Student
{
public static Student Parse(string str)
{
Student s = new Student();
return s;
}
}
public class Teacher
{
public static Teacher Parse(string str)
{
Teacher t = new Teacher();
return t;
}
}
В данных классах есть метод Parse, который принимает из файла строку и после проверки(здесь не представлена) создает экземпляр текущего класса с переданными в его конструктор данными из строки и возвращает его. Для считывания данных из файла, чтобы избежать дублирования кода, была создана функция
static void ReadFile<T>(string file, University u)
{
using (var sr = new StreamReader(file, Encoding.GetEncoding("windows-1251")))
{
string str = "";
int lineNumber = 1;
while ((str = sr.ReadLine()) != null)
{
if (T.Parse(str) != null) // Parse вернет null, если строка некорректна
u.Add(T.Parse(str)); // в University добавляется готовый объект
else
Console.WriteLine("Некорректно введенные данные в файле in.txt в строке " + lineNumber);
lineNumber++;
}
}
}
Для хранения данных о студентах и учителях есть два файла, teachers.txt и students.txt. У учителей и студентов в файлах присутствуют различные данные. Проблема в том, что в функцию ReadFile вместо T будет передаваться либо Student, либо Teacher. Но каким образом в теле цикла в условном операторе обратиться к их статическому методу Parse?(в приведенном коде ошибка). Т.е не получается обратиться к T.Parse(), тк T заранее не известен, но можно ли написать какую-нибудь конструкцию, чтобы уже в процессе выполнения программы по переданному параметру Т обращаться к функции Parse?(или прекращать выполнение подпрограммы, если T некорректен)