为什么两个空列表不相等?

Vie*_*orm 5 c#

我以为在两个空列表上调用Equals()会返回true,但事实并非如此.有人能解释为什么吗?

var lst = new List<Whatever>();
var lst2 = new List<Whatever>();
if(!lst.Equals(lst2))
    throw new Exception("seriously?"); // always thrown
Run Code Online (Sandbox Code Playgroud)

Kob*_*obi 7

因为Equals正在检查引用 - lst并且lst2是不同的对象.(请注意,Equals是从中继承Object而未在其中实现List<T>)

你正在寻找Linq的SequenceEquals.
即使在使用时SequenceEquals,也不要指望它Whatever在非空列表上与您的类一起工作(除非它是一个结构).您可能希望实现比较器,并使用正确的重载.


Har*_*san 3

Equals这里比较两个列表的引用,这两个列表会有所不同,因为它们是单独的列表,这就是为什么在这种情况下它总是错误的。