在例程中预期

本文关键字:例程 | 更新日期: 2023-09-27 18:07:07

我是一名正在学习c#的学生。我试着写这个例程,但我得到一个错误,告诉我一个"}"是预期的。然而,当我添加"}"时,我得到了一大堆其他错误。我认为这是因为你没有在"else"语句之前添加"}"。这是我的代码:

private void PathExist()
{
    if (Directory.Exists(folderBrowserDialog.SelectedPath + @"'"))
        lblExist.Visible = false;
        Properties.Settings.Default.FirstTime = false;
        // Create a new instance of the Form2 class
        MainFrm MainForm = new MainFrm();
        MainForm.Show();
        Hide();//This is where Visual Studio is telling me that a "}" is expected
    else
    {
        lblExist.Visible = true;
        lblExist.Text = "Folder doesn't exist";
        lblExist.ForeColor = Color.Red;
    }
}

在例程中预期

学习如何格式化代码是编写正确工作的代码的关键技能。

private void PathExist()
{
    if (Directory.Exists(folderBrowserDialog.SelectedPath + @"'"))
    {
        lblExist.Visible = false;
        Properties.Settings.Default.FirstTime = false;
        // Create a new instance of the Form2 class
        MainFrm MainForm = new MainFrm();
        MainForm.Show();
        Hide(); //This is where Visual Studio is telling me that a "}" is expected
    }        
    else 
    {
        lblExist.Visible = true;
        lblExist.Text = "Folder doesn't exist";
        lblExist.ForeColor = Color.Red;
    }
}

请注意if语句之后添加了一个开始的{,在else语句之前添加了一个相应的结束的}

现在,你可能会说"但是我在c#中看到过大括号看起来是可选的!"这只适用于像下面这样的单个逻辑行:

if (condition)
    ExecuteMethod();
else 
    ExecuteOtherMethod();

如果条件中的任何代码块包含多个"指令",则必须将该代码用大括号括起来。此外,一些c#开发人员坚持认为所有代码都应该用大括号包装,以避免混淆,这是一种良好的实践。

你想干什么?是否希望if和else之间的所有语句仅在目录存在时才执行?如果是这样,那么您需要将它们全部放在一个块中。由于块中有多条语句,因此必须用开始和结束大括号来指定它。否则,if语句将只包含下一条语句。

        private void PathExist()
    {
        if (Directory.Exists(folderBrowserDialog.SelectedPath + @"'"))
        {
            lblExist.Visible = false;
            Properties.Settings.Default.FirstTime = false;
            // Create a new instance of the Form2 class
            MainFrm MainForm = new MainFrm();
            MainForm.Show();
            Hide(); 
        }
        else 
        {
            lblExist.Visible = true;
            lblExist.Text = "Folder doesn't exist";
            lblExist.ForeColor = Color.Red;
        }
    }

如果您只希望lblExist.Visible = false;语句在Directory.Exists时执行,并且您希望接下来的4个语句总是执行,那么您需要解释else的作用。因为它不是if子句的一部分。if子句在lblExist.Visible = false;之后以分号结束。您不能在if/else结构的if块和else块之间放置旨在始终执行的其他代码。这就是产生错误的原因。

如果在If语句后不包含{},则只有If条件下的一条语句将被视为If块。而你的else块没有关联的If条件

编译器假定它是

private void PathExist()
{
    if (Directory.Exists(folderBrowserDialog.SelectedPath + @"'"))
    {
        lblExist.Visible = false;
    }
        Properties.Settings.Default.FirstTime = false;
        // Create a new instance of the Form2 class
        MainFrm MainForm = new MainFrm();
        MainForm.Show();
        Hide();

    else
    {
        lblExist.Visible = true;
        lblExist.Text = "Folder doesn't exist";
        lblExist.ForeColor = Color.Red;
    }
}

Else块无效。这可以按如下方法解决。

private void PathExist()
{
    if (Directory.Exists(folderBrowserDialog.SelectedPath + @"'"))
    {//Answer
        lblExist.Visible = false;
        Properties.Settings.Default.FirstTime = false;
        // Create a new instance of the Form2 class
        MainFrm MainForm = new MainFrm();
        MainForm.Show();
        Hide();
    }//Answer
    else
    {
        lblExist.Visible = true;
        lblExist.Text = "Folder doesn't exist";
        lblExist.ForeColor = Color.Red;
    }
}