繁体   English   中英

字符串相等中的奇怪Lambda行为

[英]Weird Lambda behavior in string equality

我有一个字符串数组obj[] values ,但是尝试使用相等性似乎与我所期望的不同,有人可以澄清一下吗?

值的内容是[“ train”,“ train”];

var first = values.First();

values.Skip(1).All(v => Equals(v, first))
false
values.Skip(1).All(v => v.Equals(first))
true

Equals(values[0], values[1])
true
Equals(values[1], values[0])
true

values.Skip(1).All(v => Equals(v, first) == true)
false
values.Skip(1).Any(v => Equals(v, first) == false)
true

任何线索为什么它返回假?

Edit1:我写了一个单元测试,它通过了,我正在检查字符串是否具有@Michael Randall建议的不同文化。

等于在MSDN上的实现

你的问题一定是你的投入

注意 :您应该考虑进行适当的字符串比较。 在.NET中使用字符串的最佳实践

但是,通过适当的输入可以看到,您的代码实际上可以正常工作

var first = "train";
var values = new object[]{"train", "train"};
Console.WriteLine(values.Skip(1).All(v => Equals(v, first)));
Console.WriteLine(values.Skip(1).All(v => v.Equals(first)));
Console.WriteLine(Equals(values[0], values[1]));
Console.WriteLine(Equals(values[1], values[0]));
Console.WriteLine(values.Skip(1).All(v => Equals(v, first) == true));
Console.WriteLine(values.Skip(1).Any(v => Equals(v, first) == false));

产量

True
True
True
True
True
False

你可以在这里测试

@TheGeneral答案通常是正确的,但就我而言,重新启动计算机可以解决此问题。 我猜这是调试器有一个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM