在if语句中创建对象的实例

时间:2013-04-27 02:39:23

标签: c# if-statement instance

我正在尝试创建一个新实例(Expander)并在每次变量不等于另一个变量时将其放在StackPanel内。

问题;但是,似乎是我无法访问if函数之外的变量。 我明白了:

  

“错误名称'expand'在当前上下文中不存在”

如果我在函数外声明新实例,那么应用程序按预期运行一次通过if语句。第二次运行if语句时出现错误:

  

“指定的Visual已经是另一个Visual的子项或CompositionTarget的根。”

 if (lastStatement != first.ToString())   {

     i++;
     Expander expand = new Expander();

     expand.Name = "expander" + i.ToString();   

     stackpanel1.Children.Add(expand); //This where the error is
 } expand.Content += ones; // I need to place this here for the code to work

这是我得到的情况:

  

“错误名称'expand'在当前上下文中不存在”

第二次尝试(当我在语句之外创建实例时)我得到:

  

“指定的Visual已经是另一个Visual的子项或CompositionTarget的根。”

1 个答案:

答案 0 :(得分:1)

声明变量并创建新实例可以在单独的步骤中完成。您可以在if - 块之外简单地声明它并在其中进行实例化,但是,在尝试使用它之前,您仍需要将其设置为有效值,否则您将获得NullReferenceException

这样的事情:

Expander expand;

if (lastStatement != first.ToString())
{
    i++;
    expand = new Expander();
    expand.Name = "expander" + i.ToString();   
    stackpanel1.Children.Add(expand);
} 
else
{
    expand = ... // set expand to some other instance of expander
}

expand.Content += ones;

然而,看起来您正在使用某种循环。在这种情况下,可能会尝试仅在某些条件下创建新的Expander,否则会重复使用之前的Expander。在这种情况下,您还需要在循环块外声明变量。

这样的事情:

Expander expand = null;

foreach(...)
{
    if (lastStatement != first.ToString())
    {
        i++;
        expand = new Expander();
        expand.Name = "expander" + i.ToString();
        stackpanel1.Children.Add(expand);
    } 

    expand.Content += ones;
}