C# 查看2D阵列中颜色是否匹配的更简单/更好的方法

C# 查看2D阵列中颜色是否匹配的更简单/更好的方法,c#,multidimensional-array,C#,Multidimensional Array,我有一个名为grid的btn 2D数组6,7,我想扫描看看在水平、垂直和对角方向上是否有四个黄色或红色。目前我正在使用if语句,如果可能的话,在for循环中放置一些语句,例如 for (int i = 0; i < 6; i++) { if (grid[i, 0].BackColor == Color.Red && grid[i, 1].BackColor == Color.Red && grid[i, 2].BackColor == Color.Re

我有一个名为grid的btn 2D数组6,7,我想扫描看看在水平、垂直和对角方向上是否有四个黄色或红色。目前我正在使用if语句,如果可能的话,在for循环中放置一些语句,例如

for (int i = 0; i < 6; i++)
{
   if (grid[i, 0].BackColor == Color.Red && grid[i, 1].BackColor == Color.Red && grid[i, 2].BackColor == Color.Red && grid[i, 3].BackColor == Color.Red
       || grid[i, 1].BackColor == Color.Red && grid[i, 2].BackColor == Color.Red && grid[i, 3].BackColor == Color.Red && grid[i, 4].BackColor == Color.Red
       || grid[i, 2].BackColor == Color.Red && grid[i, 3].BackColor == Color.Red && grid[i, 4].BackColor == Color.Red && grid[i, 5].BackColor == Color.Red
       || grid[i, 3].BackColor == Color.Red && grid[i, 4].BackColor == Color.Red && grid[i, 5].BackColor == Color.Red && grid[i, 6].BackColor == Color.Red)
   {
       txtBoxWinner.Text = "RED is the WINNER";
   }
}
for(int i=0;i<6;i++)
{
如果(网格[i,0]。BackColor==Color.Red&&grid[i,1]。BackColor==Color.Red&&grid[i,2]。BackColor==Color.Red&&grid[i,3]。BackColor==Color.Red
||网格[i,1]。背景色==颜色。红色和网格[i,2]。背景色==颜色。红色和网格[i,3]。背景色==颜色。红色和网格[i,4]。背景色==颜色。红色
||网格[i,2]。背景色==颜色。红色和网格[i,3]。背景色==颜色。红色和网格[i,4]。背景色==颜色。红色和网格[i,5]。背景色==颜色。红色
||网格[i,3]。背景色==Color.Red&&grid[i,4]。背景色==Color.Red&&grid[i,5]。背景色==Color.Red&&grid[i,6]。背景色==Color.Red)
{
txtBoxWinner.Text=“红色是赢家”;
}
}

有人能帮我找一个较短的替代方案吗?谢谢

这让我感觉更干净了

for (int i = 0; i < 6; i++)
{
     int correctCount = 0;
     for (int j = i; j < i + 3 && j < 7; j++)
     {
          if (grid[i, j].BackColor == Color.Red)
                correctCount++;
     }
     if (correctCount >= 3)
         txtBoxWinner.Text = "RED is the WINNER"; 
}
for(int i=0;i<6;i++)
{
int correctCount=0;
对于(int j=i;j=3)
txtBoxWinner.Text=“红色是赢家”;
}

很抱歉,在我还没意识到其中也有or语句之前……这应该可以做到。

不要使用2d数组,而是创建一个适当的数据模型集合,该集合可以使用LINQ进行遍历。不要让您的应用程序逻辑基于UI元素属性的状态,而是创建一个适当的数据模型集合,该数据模型可以通过LINQ进行遍历。我希望继续使用阵列。谢谢你的意见@user3392999检查编辑,我修复了它,抱歉之前我没有意识到你在其中有或语句,它告诉我“索引超出了数组的边界”。@user3392999然后将
j<7
更改为
j<6
我可能在测试中使用了错误大小的数组