У меня есть такой класс
public enum RespondantRole
{
Operator = 0,
Supervisor = 1,
Director = 2
}
public class Respondant: IComparable<Respondant>
{
public string Name { get; set; }
public RespondantRole Role { get; set; }
public int CompareTo(Respondant other)
{
return ((int)this.Role).CompareTo((int)other.Role);
}
}
Я хочу создать SortedSet
с этим классом.Но я хочу, чтобы заказ осуществлялся по ролям, т.е. операторам, руководителям и директорам.Однако, поскольку это не допускает дублирование, я хочу, чтобы проверка на равенство основывалась на уникальном поле Name
.
Итак, когда я инициализирую этот набор с помощью приведенного ниже кода, я получаю правильный порядок, но только 3 элемента, так как остальные три получают повторяющиеся проблемы при последующих добавлениях.
Как мне отсортировать этот набор по ролям, в то время как уникальное ограничение основано на атрибуте Name.
public class CallCenterManager
{
private SortedSet<Respondant> AvailableRespondants;
public CallCenterManager()
{
AvailableRespondants = new ObservableSortedSet<Respondant>();
for(int i=0; i < 10; ++i)
{
AvailableRespondants.Add(new Respondant() { Name = $"Operator{i}", Role = RespondantRole.Operator });
if(i < 5)
{
AvailableRespondants.Add(new Respondant() { Name = $"Supervisor{i}", Role = RespondantRole.Supervisor });
}
if(i < 3)
{
AvailableRespondants.Add(new Respondant() { Name = $"Director{i}", Role = RespondantRole.Director });
}
}
}
Когда я запускаю приведенный выше код, я получаю 3 записи в наборе
{ Name = "Operator0", Role = Operator}
{ Name = "Supervisor0", Role = Supervisor}
{ Name = "Director0", Role = Director}
Теперь это отсортировано по уровню роли, но поскольку compareTo
основано на роли, следующий набор Respondant
с той же ролью не вставляется.т.е. вы не видите { Name = "Operator1", Role = Operator}
Итак, как бы я хотел, чтобы вывод был
{ Name = "Operator0", Role = Operator}
{ Name = "Operator1", Role = Operator}
{ Name = "Operator2", Role = Operator}
.. upto 10 entries
{ Name = "Supervisor0", Role = Supervisor}
{ Name = "Supervisor1", Role = Supervisor}
.. up to 5 entries
{ Name = "Director0", Role = Director}
.. upto 3 entries