Спецификация С# - Раздел 1.6.7.5 может кто-нибудь объяснить этот пример?

Мне хотелось узнать больше о языке С#, и многие люди рекомендовали копаться в спецификации С#, поэтому я отправил и загрузил ее копию из MSDN и начал читать и просматривать примеры.

Спецификация С# Вводная часть - Раздел 1.6.7.5 Операторы

"Класс List объявляет два оператора: оператор == и оператор! =, и, таким образом, дает новое значение выражениям, которые применяют эти операторов для экземпляров списка. В частности, операторы определяют равенство двух экземпляров списка как сравнение каждого из содержащихся объектов, используя их методы Equals. В следующем примере используется параметр == оператора для сравнения двух экземпляров списка.

Я не понимаю, почему вывод будет True и False, в отличие от обоих False.

using System;
class Test
{
    static void Main() {
        List<int> a = new List<int>();
        a.Add(1);
        a.Add(2);
        List<int> b = new List<int>();
        b.Add(1);
        b.Add(2);
        Console.WriteLine(a == b);      // Outputs "True" 
        b.Add(3);
        Console.WriteLine(a == b);      // Outputs "False"
    }
}

Я вставляю это в Visual Studio, и я уверен, что у меня есть и Console.WriteLine() как " False", в отличие от обоих - "True" и "False", как указано в комментариях.

В нем также указано, что List-of-T объявляет один элемент события с именем Изменен, я не мог на всю жизнь найти его, я пошел в декомпилятор и тоже посмотрел.

Возможно, я полностью неправильно читаю его или у меня неправильная спецификация С#.

Ответы

Ответ 1

Этот отрывок не относится к System.Collections.Generic.List<T>, а скорее к гипотетическому классу List<T>, который появляется в разделе 1.6.7:

В следующей таблице показан общий класс, называемый List<T>, который реализует растущий список объектов. Класс содержит несколько примеры наиболее распространенных типов членов функции.

Этот класс List выполняет перегрузку операторов == и != для работы, как показано, имеет событие Changed и т.д.

Ответ 2

List<T> не предоставляет оператор ==, поэтому по умолчанию он равен от object, который является ссылочным равенством. Вы видите результат false каждый раз (и каждый раз), потому что эти два списка не являются одинаковыми экземплярами и никогда не будут.