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

时间:2013-10-05 15:18:55

标签: c#

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

C#规范介绍 - 第1.6.7.5节“运营商”

  

“List类声明了两个运算符,运算符== 运算符   !=,因此为应用这些的表达式赋予了新的含义   运算符到列表实例。具体来说,运营商定义   两个List实例的相等性,比较每个包含的   对象使用他们的Equals方法。以下示例使用==   运算符来比较两个List实例。“

我不明白为什么输出 True 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声明了一个名为 Changed 的单个事件成员,我无法找到它的生命,我进入反编译器并看了一眼

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

2 个答案:

答案 0 :(得分:16)

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

  

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

List会使运算符==!=重载,如图所示,有Changed个事件等。

答案 1 :(得分:5)

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