我有一个枚举(theEnumerable
),其中包含若干项(引用类型)。
以下表达式theEnumerable.Last() == theEnumerable.Last()
的计算结果为false
。
其中:
theEnumerable = Enumerable.Range(1, x).Select(x => new T())
那是为什么?
答案 0 :(得分:4)
并非所有序列都必须以相同的顺序返回相同的值。序列每次迭代都可以产生不同的值,或者以不同的顺序产生这些值。
所讨论的类型也可能具有重载的等于运算符,从而导致对象与其自身不相等。类型永远不会做到这一点,但是从技术上讲,它们可以做到。
答案 1 :(得分:4)
根据OP注释。可枚举创建如下:
Enumerable.Range(1, x).Select(x => new T())
因此,当您执行theEnumerable.Last() == theEnumerable.Last()
时,会两次枚举theEnumerable
,这意味着每次迭代{{1}时都会执行一次Select
lambda x => new T()
},意味着每次迭代都会产生不同的结果,从而造成混乱。
如果您希望自己的代码像期望的那样工作。执行以下操作。
theEnumerable