我想了解更多有关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#规范错了。
答案 0 :(得分:16)
该段落并未引用System.Collections.Generic.List<T>
,而是指1.6.7节中出现的假设List<T>
类:
下表显示了一个名为
List<T>
的泛型类,它是 实现可增长的对象列表。该类包含几个 最常见的功能成员的例子。
该类List
会使运算符==
和!=
重载,如图所示,有Changed
个事件等。
答案 1 :(得分:5)
List<T>
未提供==
运算符,因此默认为object
的参照等式。您每次(以及每次)都会看到结果false
,因为这两个列表不是相同的实例,而且永远不会。