[英]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建议的不同文化。
你的问题一定是你的投入
注意 :您应该考虑进行适当的字符串比较。 在.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.