У меня есть базовый класс Person, в который я не могу вмешаться.
Нужна сортировка списка элементов этого класса (к примеру, по дню рождения)
Наследуюсь:
public class EPerson : Person, IComparable
Добавляю в класс EPerson метод для сравнения:
public class EPerson : Person, IComparable
{
public int CompareTo(object obj)
{
return ((Note)obj).BirthDate.CompareTo(this.BirthDate);
}
}
Хочу дальне написать так:
private void button1_Click(object sender, EventArgs e)
{
// получаю исходный список
PersonRepository personRep = new PersonRepository();
List<Person> persons = personRep.GetAll();
// Делаю из них "сравнимых" друг с другом персон:
List<EPerson> epersons = new List<EPerson>();
foreach (Person p in persons)
{
EPerson ep = new EPerson();
ep = (EPerson)p;
epersons.Add(ep);
}
// сортирую новый список:
epersons.Sort();
}
Ошибка InvalidCastException подстерегает меня на строке
ep = (EPerson)p;
Как правильно сделать то, что я хотел сделать? Имеется в виду — можно ли присвоить элемент базового класса элементу производного без утомительного перечисления всех полей?
Буду благодарен за конструктивные советы, только не надо кидать в меня "умными" словами типа "напиши конструктор копирования" — приведите пример, пожалуйста.
Спасибо.
Здравствуйте, SteeLHeaD, Вы писали:
SLH>У меня есть базовый класс Person, в который я не могу вмешаться.
SLH>Нужна сортировка списка элементов этого класса (к примеру, по дню рождения)
SLH>Наследуюсь:
Наследоваться не нужно. Напишите реализацию IComparer<Person> и вызывайте
List<T>.Sort Method (IComparer<T>) или напишите метод
int Compare(Person left, Person right) {}
и вызывайте
List<T>.Sort Method (Comparison<T>).
По ссылкам есть и примеры.