我正在尝试创建一个新实例(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的根。”
答案 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;
}