我有一个字符串数组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
任何线索,为什么它返回false?
Edit1:我写了一个单元测试并且它通过了,我正在检查字符串是否有不同的文化,如@Michael Randall建议
答案 0 :(得分:1)
您的问题必须是您的输入
注意 :您应该考虑进行正确的字符串比较。 Best Practices for Using Strings in .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
答案 1 :(得分:0)
@TheGeneral答案通常是正确答案,但在我的情况下重新启动机器会删除此问题。我的猜测是调试器有错误。