Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以做一个switch语句来询问bool是否等于true吗?_C#_Winforms - Fatal编程技术网

C# 我可以做一个switch语句来询问bool是否等于true吗?

C# 我可以做一个switch语句来询问bool是否等于true吗?,c#,winforms,C#,Winforms,我正在写一个Tic-Tac-Toe游戏,想看看下面的按钮是否被点击了。(如果这是真的,就意味着你赢了。)我认为switch语句更有效,但它的红色下划线,我不明白为什么 这是我目前的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te

我正在写一个Tic-Tac-Toe游戏,想看看下面的按钮是否被点击了。(如果这是真的,就意味着你赢了。)我认为switch语句更有效,但它的红色下划线,我不明白为什么

这是我目前的代码:

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Tic_tac_toe2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool buttonisclicked = false;
        bool buttonisclicked1 = false;
        bool buttonisclicked2 = false;
        bool buttonisclicked3 = false;

        public void button1_Click(object sender, EventArgs e)
        {
            Button clickedButton1 = (Button)sender;
            clickedButton1.Text = "X";

            if (clickedButton1.Text == "X")
            {

                buttonisclicked1 = true;
            }
        }

        public void button2_Click(object sender, EventArgs e)
        {
            Button clickedButton2 = (Button)sender;
            clickedButton2.Text = "X";

            if (clickedButton2.Text == "X")
            {

                buttonisclicked2 = true;
            }
        }

        public void button3_Click(object sender, EventArgs e)
        {
            Button clickedButton3 = (Button)sender;
            clickedButton3.Text = "X";

            if (clickedButton3.Text == "X")
            {

                buttonisclicked3 = true;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button9_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }

            void Win()
            {
                switch (buttonisclicked)
                {
                    case bool buttonisclicked1 && buttonisclicked2 && buttonisclicked3 = true:

                        Console.WriteLine("Won");
                        break;
                }


            }
        }

我必须摆脱休息;或者我不能使用&&operator吗?

老实说,我喜欢您正在尝试的操作,但是对于像布尔运算这样简单的操作(只能是真或假),您只需要一个if语句

if(buttonisclicked1&&buttonisclicked2&&buttonisclicked3){
Console.WriteLine(“韩元”);
}
如果您希望在返回false时发生某些事情,只需添加到前面的代码:

else{

Console.WriteLine(“Lost”);//在进行滴答声游戏时,最好将得分逻辑与事件分开

您应该在表单中创建此变量:

    private Button[][] _buttons = null;
然后在
表单中加载
执行以下操作:

        _buttons = new []
        {
            new [] { button1, button2, button3 },
            new [] { button4, button5, button6 },
            new [] { button7, button8, button9 },
        };
现在,您可以创建一个方法,该方法返回字符串列表,这些字符串水平、垂直和按对角线分割网格:

    private IEnumerable<string> GetSlices() =>
        Enumerable
            .Range(0, 3)
            .SelectMany(n => new[]
            {
                String.Join("", Enumerable.Range(0, 3).Select(m => _buttons[m][n].Text)),
                String.Join("", Enumerable.Range(0, 3).Select(m => _buttons[n][m].Text))
            })
            .Concat(new[]
            {
                String.Join("", Enumerable.Range(0, 3).Select(x => _buttons[x][x].Text)),
                String.Join("", Enumerable.Range(0, 3).Select(x => _buttons[x][2 - x].Text))
            });

“我认为switch语句更有效”-比什么更有效?一个简单的
if
语句?不,它不是-我强烈建议在这一点上不要过于担心效率。尽管值得关注的是“大规模”效率(例如,您使用的是O(n)还是O(n^2)可能需要处理大量数据的算法)您现在看到的是微优化。目前,我建议您编写最简单的代码。好的,您可以通过两种方式了解红色的摆动线告诉您什么:查看Visual Studio中的错误列表面板。应该有一条与红色摆动线对应的错误消息。或者只需将鼠标悬停在d上如果你不确定如何正确使用switch/case,你可能还需要查阅有关switch/case的文档和/或教程在错误消息中…顺便说一下,您当然可以使用switch语句来测试bool变量是否为true(或false)。但是这样做通常并没有真正的用处,因为基于bool变量的switch/case只不过是简单的
if(myBoolVar)…else…
if的复杂形式(!myBoolVar)…其他…
        var slices = GetSlices();

        if (slices.Any(s => s == "XXX"))
        {
            MessageBox.Show("X Won!");
        }

        if (slices.Any(s => s == "OOO"))
        {
            MessageBox.Show("O Won!");
        }