C#规范 - 第1.6.7.5节有人可以解释这个例子吗?

The*_*hap 14 c#

我想了解更多有关C#语言的知识,很多人都建议深入研究C#规范,所以我从MSDN下载并下载了它的副本,然后开始阅读并完成示例.

C#规范介绍 - 第1.6.7.5节运算符

"List类声明了两个运算符,operator ==operator !=,因此为将这些运算符应用于List实例的表达式赋予了新的含义.具体来说,运算符定义两个List实例的相等性,因为它们使用它们比较每个包含的对象等于方法.以下示例使用==运算符来比较两个List实例."

我不明白为什么输出将是TrueFalse,而不是两者都是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"
    }
}
Run Code Online (Sandbox Code Playgroud)

我把它放到Visual Studio中,果然我把Console.WriteLine()都设为' False ',而不是注释中指定的'True'和'False'.

它还声明List-of-T声明了一个名为Changed的单个事件成员,我无法在我的生活中找到它,我进入反编译器并看了一眼.

也许我完全误读了它,或者我有错误的C#规范.

Jon*_*Jon 16

该段落并未涉及System.Collections.Generic.List<T>,而是List<T>出现在1.6.7节中的假设类:

下表显示了一个名为的泛型类List<T>,它实现了一个可增长的对象列表.该类包含几种最常见的函数成员的几个示例.

List不超载运营==,并!=如图所示的工作,有一个Changed事件等.


Dar*_*opp 5

List<T>不提供==运算符,因此默认object为引用相等.您false每次(以及每次)都会看到结果,因为这两个列表不是同一个实例,而且永远不会.