Будет ли использование List <T>чудом или беспорядком? - PullRequest
3 голосов
/ 03 марта 2011

Я хочу отправлять встречи представителям (я избавляю вас от подробностей).

Мне нужно иметь для каждого представителя список назначенных им встреч.Для второго шага мне также нужен список возможных повторений для каждой встречи.

Я хочу собрать свои данные только один раз.Что делать, если у меня есть что-то вроде этого:

class Rep
{
    int repNumber;
    List<Appointment> availableApps;
}

class Appointment
{
    int appointmentNumber;
    List<Rep> availableReps;
}

Я бегу после проблемы?Мне кажется, что это нормально, но я вижу, что это может создать некий бесконечный круг ссылок.

Что вы думаете?Спасибо

Ответы [ 5 ]

5 голосов
/ 03 марта 2011

Все хорошо; классы являются ссылочными типами.

4 голосов
/ 03 марта 2011

Я не вижу в этом ничего плохого. В .NET Framework вы видите похожие классы, такие как формы и элементы управления, например:

myControl.childControl.Parent

myControl может ссылаться на дочерние элементы управления, которые затем могут ссылаться на своих родителей.

3 голосов
/ 03 марта 2011

Похоже, ваши типичные отношения "многие ко многим".

Просто убедитесь, что у вас есть правильная логика там. Если представитель уволен, что происходит с его назначениями? Как и во всех сложных структурах, есть много гочей, которые могут вас запутать.

2 голосов
/ 03 марта 2011

Все в порядке.Двусвязный список тоже имеет «бесконечный круг ссылок», ну и что.Это один из способов создания отношений «многие ко многим».

Имейте это в виду, если вы когда-нибудь захотите сериализовать данные.Некоторые сериализаторы плохо справляются с такими вещами.То же самое относится и к пользовательским реализациям IEquatable и переопределению GetHashCode: есть способы испортить что-то в этих операциях, когда ваша структура данных такая.

В принципе, все нормально, если вы не хотитереализовать некоторые глубокие (а не поверхностные) операции, такие как клонирование, сравнение, сериализация и так далее.Тогда вы должны быть осторожны.

1 голос
/ 03 марта 2011

Это совершенно верно;C # (и большинство других языков) обрабатывает типы, которые ссылаются друг на друга по кругу.Причина, по которой это не вызывает проблем, заключается в том, что все переменные типа класса являются ссылками.Таким образом, объект Rep не будет содержать много объектов Appointment;скорее это ссылки список, который снова содержит ссылки много Appointment объектов.Каждый Appointment объект ссылается на список, который содержит ссылки на многие Rep объекты (которые вполне могут быть теми же Rep объектами, которые ссылались на Appointment объекты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...