C# объявить переменную в Оператор if

Я хочу сделать что-то вроде этого, используя C# :

if (i == 0)
{
 button a = new button();
}
else
{
 TextBlock a = new TextBlock();
}
mainpage.children.add(a);

но я получаю ошибку, что

Ошибка 1 имя " a " не существует в текущем контексте

какие идеи ?

спасибо заранее !

4 ответов


вам нужен общий базовый класс, как button и Textblock наследовать, и он должен быть объявлен вне if оператор, если он должен быть доступен после if завершено. Control может?

Control a;
if (i == 0)
{
 a = new button();
}
else
{
 a = new TextBlock();
}
mainpage.children.add(a);

Не зная, какой конкретный инструментарий управления вы используете (возможно, WPF? Я не могу советовать дальше. Но я бы посмотрел на подпись для Add чтобы получить ключ - каков параметр, объявленный как?


попробуйте объявить a вне области действия if / else. Вот так:

Control a;
if (i == 0)
{
  a = new button();
}
else
{
  a = new TextBlock();
}
mainpage.children.add(a);

вам нужно объявить переменную в родительской области и дать ей общий базовый класс. Общий базовый класс для System.Windows.Controls.TextBlock и System.Windows.Controls.Button может быть, например,System.Windows.UIElement или System.Windows.FrameworkElement. Так что ваш код может выглядеть так:

UIElement a;
if (i == 0)
{
    a = new Button();
}
else
{
    a = new TextBlock();
}
mainpage.children.add(a);

Я нашел обсуждение объявления и назначения переменных внутри условия здесь: http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/11a423f9-9fa5-4cd3-8a77-4fda530fbc67

кажется, это невозможно сделать на C#, хотя вы можете на других языках