в SortedSet<T> баг?
От: g-host  
Дата: 25.04.11 17:54
Оценка:
Или баг в моих мозгах...Ничего не понимаю.
Есть SortedSet<Tuple<string, int>>
Я благополучно передаю в конструктор свой компаратор. Алгоритм сравнения очень прост,
код компаратора даже нету смысла приводить:
если строки равны возвращаем 0.
иначе сравниваем числа, если и числа равны то просто string.CompareTo(x.Item1, y.Item2)
Но, как же я удивился как например после того как в списке есть ("10", 8)
то ("10", 0) все равно добавляется, несмотря на обещанное
"Класс SortedSet<T>не принимает повторяющихся элементов. Если item уже присутствует в наборе, то этот метод возвращает значение false и не вызывает исключение"
Такой код:

 SortedSet<Tuple<string, int>> l = new SortedSet<Tuple<string, int>>(new MyComparer());
 for (int i = 0; i < 100; i++)
    l.Add(new Tuple<string, int>(i.ToString(), i));
 for (int i = 0; i < 10; i++)
    l.Add(new Tuple<string, int>(i.ToString(), default(int)));
 Console.WriteLine(l.Count);


выводит 106, хотя я ожидаю 100

В то же время


 SortedSet<Tuple<string, int>> l = new SortedSet<Tuple<string, int>>(new MyComparer());
 for (int i = 0; i < 100; i++)
    l.Add(new Tuple<string, int>(i.ToString(), i));
 for (int i = 0; i < 10; i++)
    l.Remove(new Tuple<string, int>(i.ToString(), default(int)));
 Console.WriteLine(l.Count);



успешно удаляет 10 элементов и выводит 90
Т.е. при удалении элементы равны, а при добавлении и Contains — нет
Что за двойные стандарты
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.