15

我想了解更多关于 C# 语言的知识,很多人建议深入研究 C# 规范,所以我从 MSDN 下载了一份副本并开始阅读和浏览示例。

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

“List 类声明了两个运算符,运算符 ==运算符 !=,从而为将这些运算符应用于 List 实例的表达式赋予了新的含义。具体来说,运算符将两个 List 实例的相等性定义为使用它们的比较每个包含的对象Equals 方法。以下示例使用 == 运算符比较两个 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"
    }
}

我将其弹出到 Visual Studio 中,果然我将 Console.WriteLine() 都设置为“ False ”,而不是评论中指定的“True”和“False”。

它还指出 List-of-T 声明了一个名为Changed的​​单个事件成员,我一生都找不到它,我进入反编译器并查看了它。

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

4

2 回答 2

16

该段落不是指System.Collections.Generic.List<T>,而是List<T>指出现在第 1.6.7 节中的一个假设类:

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

该类List确实重载运算符==并如图所示工作!=有一个Changed事件等。

于 2013-10-05T15:22:52.843 回答
5

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

于 2013-10-05T15:25:52.520 回答