Не находит объект Contains и ContainsKey c#
Есть 4 коллекции:
Stack<trialClass> collectionTrial;
Stack<string> collectionTest;
Dictionary<trialClass, testClass> dictionaryTr;
Dictionary<string, testClass> dictionaryStr;
Заполняю первую коллекцию:
for (int i = 0; i < count; i++)
{
trialClass temp = new trialClass(arrayNames[rnd.Next(0,9)], arraySubjects[rnd.Next(0, 9)], rnd.Next(0, 100));
collectionTrial.Push(temp);
}
Вторую заполняю с помощью ToString() переопределенного
Ключи для 3 коллекции берутся из элементов первой коллекции
Ключи для 4 коллекции берутся из элементов второй коллекции
Суть проблемы: При использовании Contains для стека не находит элемент через объект, но находит через строку: Пример:
trialClass first = coll.collectionTrial.Peek();
first = new trialClass(first.NameOfExam, first.Subject, first.CountOfTrials);
string second = first.ToString();
trialClass third = new trialClass(first.NameOfExam, first.Subject, first.CountOfTrials);
string fourth = third.ToString();
bool result1 = coll.collectionTrial.Contains(first);
bool result2 = coll.collectionTest.Contains(second);
bool result3 = coll.dictionaryTr.ContainsKey(third);
bool result4 = coll.dictionaryStr.ContainsKey(fourth);
Результат выполнения:
result1 - false
result2 - true
result3 - false
result4 - true
Не понимаю почему так.
Ответы (1 шт):
Вы получаете ссылку на объект trialClass типа из coll.collectionTrial и записываете ее в переменную first:
trialClass first = coll.collectionTrial.Peek();
Хорошо. Следом, Вы сразу же записываете в эту же переменную ссылку на абсолютно новый объект:
first = new trialClass(...);
Естественно, в coll.collectionTrial этой ссылки нет, и coll.collectionTrial.Contains(first) возвращает false.