Я пытаюсь использовать Except-Function для SortedDicationary, но я безумный, поскольку он не ведет себя так, как я ожидал. Функция Excpet работает до тех пор, пока записи словаря имеют простой тип данных. Тем не менее, я хотел бы хранить объекты в dictionay.Странное поведение исключающей функции SortedDictionary
Вот мой пример:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DictionaryTest
{
class Program
{
static void Main(string[] args)
{
SortedDictionary<string, Object> objects = new SortedDictionary<string, Object>();
SortedDictionary<string, Object> objects2 = new SortedDictionary<string, Object>();
objects.Add("A", new Object());
objects.Add("B", new Object());
objects2.Add("A", new Object());
IEnumerable<KeyValuePair<string, Object>> objects_a_only = objects.Except(objects2);
foreach (KeyValuePair<string, Object> o in objects_a_only)
{
Console.WriteLine(o.Key);
}
Console.WriteLine("Program finished. Press any key to continue");
Console.ReadKey();
}
}
}
Я ожидал получить только «А» в качестве выходного сигнала, но на самом деле возвращает «A» и «B».
Насколько я понял, это соответствие выполняется только на основе ключа каждой записи. Поэтому я не вижу причин работать с настроенным классом сравнения.
Любые идеи по этому вопросу?
Спасибо за помощь. Я, очевидно, неправильно понял эту структуру данных ... – Norbert
@Norbert: Я предполагаю, что вы просто не заметили, что используете метод расширения 'Enumerable', который создан для каждого типа коллекций, и иногда работает по-другому, как и ожидалось. То же самое произойдет, если вы будете использовать 'Except' в' List ', пока не будете реализовывать' Equals' и 'GetHashCode'. –