1

我可以在 if 语句中创建对象的实例吗?我制作了 2 个复选框以控制我使用的构造函数,但我收到错误消息“当前上下文中不存在名称“mth””

if (checkBox1.Checked && checkBox2.Checked)
        {
            Facto mth = new Facto(label3, wait_time, progressBar1);
        }
        else if(checkBox1.Checked==false && checkBox2.Checked)
        {
            Facto mth = new Facto(label3,wait_time);
        }
        else if (checkBox1.Checked && checkBox2.Checked == false)
        {
            checkBox1.Checked = false;
            Facto mth = new Facto();
        }
        else
        {
            Facto mth = new Facto();
        }


        int result = mth.Factorial(number);

我究竟做错了什么?我是 C# 的新手,我还没有真正掌握它。任何帮助,将不胜感激。提前致谢。

4

2 回答 2

1

这是一个范围界定问题。变量 mth 仅存在于定义它的范围内(在您的情况下为括号)。一旦您离开范围,变量就不再可用。由于您mth在代码末尾(以及范围之外)使用变量,因此您会收到此错误。为了解决这个问题,您需要在更高的范围内定义变量。请注意,您不必在那里分配它。

这会导致类似(请注意,我重新格式化了您的括号以更容易查看范围级别)

    Facto mth; // Define it as the most outer scope level you are using it
    if (checkBox1.Checked && checkBox2.Checked)
    {
         mth = new Facto(label3, wait_time, progressBar1);
    }
    else 
        if(checkBox1.Checked==false && checkBox2.Checked)
        {
            mth = new Facto(label3,wait_time);
        }
        else 
            if (checkBox1.Checked && checkBox2.Checked == false)
            {
                checkBox1.Checked = false;
                mth = new Facto();
            }
            else
            {
                mth = new Facto();
            }

   int result = mth.Factorial(number);

编辑:我建议始终在每个 if 和 else 上使用 {} 括号,即使它们不像您的情况那样严格要求。正如您在布局中看到的那样,要查看第一个 else 结束的位置以及“int 结果行不是其中的一部分”并不容易。

于 2012-07-27T09:31:01.260 回答
0

这里的问题不是在 if 块中创建实例。第 m 个引用在 if/else 块中声明。这将可见性/范围仅限于该块。所以当您尝试在 int result = mth.Factorial(number); 行中引用它时,mth 不可用

只需在 if 块外声明 mth 并仅在 if/else 块内实例化。例如:

Facto mth;
if (checkBox1.Checked && checkBox2.Checked)
{
    mth = new Facto(label3, wait_time, progressBar1);
}
...

有关一些基本信息,请参阅http://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx

于 2012-07-27T09:40:07.207 回答