C# 重复代码:如何防止出现这种情况?

C# 重复代码:如何防止出现这种情况?,c#,.net,winforms,C#,.net,Winforms,我有一个if-else语句,用于确定用户是否赢得了我的tic-tac-toe游戏,但这是我的任务!:)为了使代码更紧凑、更易于阅读,我有大量重复的代码块,并减少了代码量 以下是我的一些代码: if (button1.Text == "X" & button2.Text == "X" & button3.Text == "X") { foreach (Button button in addButton()) { button1.BackColor

我有一个if-else语句,用于确定用户是否赢得了我的tic-tac-toe游戏,但这是我的任务!:)为了使代码更紧凑、更易于阅读,我有大量重复的代码块,并减少了代码量

以下是我的一些代码:

if (button1.Text == "X" & button2.Text == "X" & button3.Text == "X")
{
    foreach (Button button in addButton())
    {
        button1.BackColor = Color.Green;
        button2.BackColor = Color.Green;
        button3.BackColor = Color.Green;
        button.Enabled = false;
    }
}
else if (button1.Text == "X" & button4.Text == "X" & button7.Text == "X")
{
    foreach (Button button in addButton())
    {
        button1.BackColor = Color.Green;
        button4.BackColor = Color.Green;
        button7.BackColor = Color.Green;
        button.Enabled = false;
    }
}
else if (button1.Text == "X" & button5.Text == "X" & button9.Text == "X")
{
    foreach (Button button in addButton())
    {
        button1.BackColor = Color.Green;
        button4.BackColor = Color.Green;
        button7.BackColor = Color.Green;
        button.Enabled = false;
    }
}
我在想也许我可以用一种私人的方式?但不确定您是否真的可以,我也不知道如何调用该方法,甚至是类?

尝试以下方法:

Button[] greenButtons = new Button[0]; // buttons to color in green
bool enabled = true; // value of Enabled for each of addButtons() to set

if (button1.Text == "X" & button2.Text == "X" & button3.Text == "X")
{
    greenButtons = new[] { button1, button2, button3 };
    enabled = false;
}
else if (button1.Text == "X" & button4.Text == "X" & button7.Text == "X")
{
    greenButtons = new[] { button1, button4, button7 };
    enabled = false;
}
else if (button1.Text == "X" & button5.Text == "X" & button9.Text == "X")
{
    greenButtons = new[] { button1, button4, button7 };
    enabled = false;
}

foreach (Button button in addButton())
{
    button.Enabled = enabled;
}
foreach (Button button in greenButtons)
{
    button.BackColor = Color.Green;
}

使用基础数据模型来表示数据。让我们假设一个整数数组

int[,] board  = new int[,] {{0,0,0}, {0,0,0},{0,0,0}};
然后,无论何时播放
X
,都可以将数组中的位置设置为1

每当播放
O
时,您将位置设置为-1


要检查赢家,您只需在赢的组合上循环,横过、向下和2个交叉模式,如果它们=3
X
赢,如果它们=3,则
O
赢。

这属于您,您今天问了同样的问题(关于减少重复代码的数量):-你可以考虑应用詹姆斯建议的技巧