在C#中创建if中的对象实例

时间:2012-07-27 09:26:40

标签: if-statement instance

我可以在if语句中创建对象的实例吗? 我已经制作了两个复选框以控制我使用的构造函数,但是我收到错误消息“名称”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#的新手,我还没有真正掌握它。 任何帮助,将不胜感激。 提前谢谢。

2 个答案:

答案 0 :(得分: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上使用{}括号,即使它们并非像你的情况那样严格要求。正如你在布局中看到的那样,看到你的第一个结束的地方并不是那么容易,并且“int结果行不是它的一部分。

答案 1 :(得分:0)

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

只需在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了解一些基本信息。