SequenceEqual总是返回false

时间:2018-06-17 19:09:29

标签: c# arrays

我进行了彩票模拟,我有2个不同的数组,其中包含6个数字,首先保存用户希望播放的数字,其次是每次运行时产生的数字。

用户将他们的数字输入文本框并将其保存为字符串并放入aray中的相应位置,随机生成的nums也会作为字符串保存到字符串数组中。

在此之后,我有一个用于比较的SequenceEqual

bool equal = lotteryNums.SequenceEqual(playerNums);

这总是返回false,我已经手动将所有生成的数组元素设置为1-6,然后玩家通过文本框相应地命名,但它总是会返回false。

生成的数组当前就像这样填充进行测试

lotteryNums[0] = "1";
lotteryNums[1] = "2";
lotteryNums[2] = "3";
lotteryNums[3] = "4";
lotteryNums[4] = "5";
lotteryNums[5] = "6";

播放器数组使用下一个数字的下一个数组位置

填充
string inputNum = inputBox_txt.Text;
playerNums[0] = inputNum;

为什么这总是返回假?

因为人们要求数组的顺序完全相同,并且似乎不包含任何比数组中的数字更多或更少的数组

4 个答案:

答案 0 :(得分:2)

如果两个源序列长度相等且它们的对应元素根据其类型的默认相等比较器相等,则

SequenceEqual返回true;否则,错误。

由于您提供的两个数组不相同,因此您获得false

答案 1 :(得分:2)

除了Athanasios Emmanouilidis所说的话:收藏品似乎需要具有相同的订单。所以你应该订购它们:

bool equal = playerNums.OrderBy(n => n).SequenceEqual(lotteryNums.OrderBy(n => n));

答案 2 :(得分:0)

要考虑的另一件事:SequenceEquals要求两个数组中的数字顺序完全相同。即使数组包含相同的数字,但它们的顺序不同,您也会得到错误。您可以通过在比较之前对每个列表进行排序来解决此问题(只需确保以相同的方式对它们进行排序)。

如果这不起作用,请验证文本框中的字符串实际上只是数字,并且不包含任何空格或特殊字符。

答案 3 :(得分:0)

SeqqnceEqual也会考虑到元素的顺序,你可能不想在彩票中使用。你想要的是检查所有预期值是否也在inout中:

var sixCorrects = lotteryNums.All(x => playerNums.Contains(x));
只要在All内找不到lotteryNums的元素,

playerNums就会停止迭代。