C# Array.Exists-可能存在错误?

C# Array.Exists-可能存在错误?,c#,arrays,mono,C#,Arrays,Mono,我最近试图完成一个非常好的LeetCode练习,我可以说我尝试使用的解决方案不是最好的,但它仍然是一个很好的实践。但是,我注意到,在使用Array.Exists函数时,我并没有得到与使用Console.WriteLine调试时预期的一致结果。当然,我在锯齿数组上使用它,但我认为这是可行的,逐行迭代数组。考虑以下示例2D阵列: [[0,1],[0,1],[0,1]] 给定此数组,您可能会认为在遍历该数组时,可以使用array.Exists来发现每个后续子数组中确实存在1和0,就像在运行以下行时一

我最近试图完成一个非常好的LeetCode练习,我可以说我尝试使用的解决方案不是最好的,但它仍然是一个很好的实践。但是,我注意到,在使用Array.Exists函数时,我并没有得到与使用Console.WriteLine调试时预期的一致结果。当然,我在锯齿数组上使用它,但我认为这是可行的,逐行迭代数组。考虑以下示例2D阵列:

[[0,1],[0,1],[0,1]]
给定此数组,您可能会认为在遍历该数组时,可以使用array.Exists来发现每个后续子数组中确实存在1和0,就像在运行以下行时一样:

Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(0)));
Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(1)));
但是,当从第一个子数组(例如,网格[0]移动到网格[1])时,我会得到假阴性,就好像数组中确实没有1,我们知道这是假的:

True
False
在这个参差不齐的数组中,这两者都应该是正确的,但显然不是,至少在LeetCode网站上是这样

还有其他人能复制这个吗

下面是一个小程序,它显示了我在控制台应用程序中运行时所讨论的问题:

using System;

public class Solution {

    public static void Main(String[] args) {

        int[][] exampleGrid = new int[][]
        {
            new int[] {2,0},
            new int[] {1,0}
        };

        Solution.Feedback(exampleGrid);

    }

    public static void Feedback(int[][] grid) {
          for(int i = 0; i < grid.GetLength(0); i++)
          {
              Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(0)));
              Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(1)));
           }
  }
}
使用系统;
公共类解决方案{
公共静态void Main(字符串[]args){
int[][]示例网格=新int[][]
{
新的int[]{2,0},
新int[]{1,0}
};
解决方案。反馈(示例网格);
}
公共静态无效反馈(int[][]网格){
for(int i=0;ix.Equals(0));
WriteLine(Array.Exists(grid[i],x=>x.Equals(1));
}
}
}

请注意:这似乎只在mono 5.18.0-C#7中重现。

我可以确认这绝对不是任何类型的编译器错误,而是代码本身。我无法在他们的操场上复制Leetcode本身

然后我发现这肯定是我自己的错误。算了吧

对于那些希望找到我的bug、提供任何输入或其他不同信息的人,请随意访问这里:


但是这已经不是本文的范围了,所以我将继续讨论。

“2d数组”和
网格[I]
不要对齐。。。你确定你说的是2d数组(
int[,]
),而不是锯齿数组(
int[][]
)?显示包含数组定义/初始化的实际值可能会有所帮助。嗨,Alexei,你说得对,这是一个锯齿状数组。我知道这个问题已经解决了,但为了它的价值,我在上面做了更新,并且可以验证除了LeetCode拥有的mono编译器之外,我不能在任何编译器上重现这个问题。示例
解决方案的预期输出。Feedback()
真、假、真、真
。这就是我得到的-你是说那不是你得到的?(顺便说一句,当发布这样的样本时,清楚地说明预期结果:x和实际结果:y是很有用的。)嗨,Matthew,是的。出于某种原因,我在Leetcode网站上看到的并不是这样。但它在其他在线C#控制台上也能像预期的那样工作:
using System;

public class Solution {

    public static void Main(String[] args) {

        int[][] exampleGrid = new int[][]
        {
            new int[] {2,0},
            new int[] {1,0}
        };

        Solution.Feedback(exampleGrid);

    }

    public static void Feedback(int[][] grid) {
          for(int i = 0; i < grid.GetLength(0); i++)
          {
              Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(0)));
              Console.WriteLine(Array.Exists<int>(grid[i], x => x.Equals(1)));
           }
  }
}