Как реализовать сортировку в производном классе?
От: SteeLHeaD  
Дата: 10.11.10 10:37
Оценка:
У меня есть базовый класс 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;

Как правильно сделать то, что я хотел сделать? Имеется в виду — можно ли присвоить элемент базового класса элементу производного без утомительного перечисления всех полей?
Буду благодарен за конструктивные советы, только не надо кидать в меня "умными" словами типа "напиши конструктор копирования" — приведите пример, пожалуйста.
Спасибо.
Re: Как реализовать сортировку в производном классе?
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 10.11.10 10:42
Оценка: 4 (1) +1
Здравствуйте, SteeLHeaD, Вы писали:

SLH>Как правильно сделать то, что я хотел сделать? Имеется в виду — можно ли присвоить элемент базового класса элементу производного без утомительного перечисления всех полей?

SLH>Буду благодарен за конструктивные советы, только не надо кидать в меня "умными" словами типа "напиши конструктор копирования" — приведите пример, пожалуйста.
SLH>Спасибо.


Не надо делать никаких производных классов, надо сделать свой IComparer<Person> и передать его в List<T>.Sort
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re: Как реализовать сортировку в производном классе?
От: _FRED_ Черногория
Дата: 10.11.10 10:43
Оценка: 4 (1)
Здравствуйте, SteeLHeaD, Вы писали:

SLH>У меня есть базовый класс Person, в который я не могу вмешаться.

SLH>Нужна сортировка списка элементов этого класса (к примеру, по дню рождения)
SLH>Наследуюсь:

Наследоваться не нужно. Напишите реализацию IComparer<Person> и вызывайте List&lt;T&gt;.Sort Method (IComparer&lt;T&gt;) или напишите метод
int Compare(Person left, Person right) {}

и вызывайте List&lt;T&gt;.Sort Method (Comparison&lt;T&gt;).

По ссылкам есть и примеры.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как реализовать сортировку в производном классе?
От: SteeLHeaD  
Дата: 10.11.10 10:55
Оценка:
Здравствуйте, _FRED_, огромное спасибо!
Все уже работает...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.