包含对winform控件的引用的数组

时间:2013-08-22 03:38:54

标签: c# visual-studio-2010

我正在使用Visual Studio 2010开发一个winform项目。我注意到在创建包含Button(或任何其他winform控件)引用的数组时会发生这种情况。如果我这样写:

Button[] buttonArray;
buttonArray = {Button1, Button2};

我会收到多个错误,例如Only assignment, call, increment, decrement, and new object expressions can be used as a statementInvalid expression term '{'等等。

对于您的信息,Button1和Button2在表单上。

即使我这样做,我仍然会遇到同样的错误:

Button[] buttonArray = new Button[2];
buttonArray = { Button1, Button2};

但是,如果我这样做,它会被Visual Studio接受:

Button[] buttonArray = new Button[2];
buttonArray[0] = Button1;
buttonArray[1] = Button2;

所以有人能告诉我出了什么问题吗?我认为包含控件引用的数组与字符串数组具有相同的本质。

谢谢。

3 个答案:

答案 0 :(得分:4)

执行此操作时:

Button[] buttonArray;
buttonArray = {Button1, Button2};

您没有使用array initialization语法。你正在做的是声明一个按钮数组但没有实例化它,然后尝试将buttonArray分配给一个代码块。数组初始化语法在赋值之外无效。像

这样的东西
void MyMethod()
{
    string[] s;
    { 
        int i = 0; 
    }
}

是C#中的有效代码块;方法中的curlies只是改变了范围。您无法将代码块分配给变量,例如:

void MyMethod()
{
    string[] s;
    s = 
    {
        int i = 0; 
    }; //Totally INVALID!
}

您需要结合声明和初始化,或new向上组合数组。

Button[] buttonArray = { Button1, Button2 }; //Valid

Button[] buttonArray;
buttonArray = new Button[] { Button1, Button2 }; //Also valid!

答案 1 :(得分:3)

尝试使用array initialization语法

Button[] buttonArray = new [] { Button1, Button2 };

Button[] buttonArray;
buttonArray = new [] { Button1, Button2};

您也可以在第一个示例中用Button[]替换var,因为C#编译器足够聪明,可以从初始化部分推断出类型。

也可以在不使用new []近变量声明的情况下初始化数组。在你的情况下,它将是

Button[] buttonArray = { Button1, Button2 };

但请注意,当您使用此类语法时,您无法使用var关键字。所以下一个代码是非法

var buttonArray = { Button1, Button2 }; //won't compile

答案 2 :(得分:1)

此处定义了正确的数组初始化语法:http://msdn.microsoft.com/en-us/library/aa287601(v=VS.71).aspx