Не находит объект 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 шт):

Автор решения: Igor

Вы получаете ссылку на объект trialClass типа из coll.collectionTrial и записываете ее в переменную first:

trialClass first = coll.collectionTrial.Peek();

Хорошо. Следом, Вы сразу же записываете в эту же переменную ссылку на абсолютно новый объект:

first = new trialClass(...);

Естественно, в coll.collectionTrial этой ссылки нет, и coll.collectionTrial.Contains(first) возвращает false.

→ Ссылка