【问题标题】:Array containing reference to winform controls包含对 winform 控件的引用的数组
【发布时间】:2013-08-22 11:50:43
【问题描述】:

我正在使用 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;

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

谢谢。

【问题讨论】:

  • 你的语法错误,仅此而已

标签: c# visual-studio-2010


【解决方案1】:

当你这样做时:

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

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

void MyMethod()
{
    string[] s;
    { 
        int i = 0; 
    }
}

是 C# 中的有效代码块;方法内的卷曲只是改变范围。您无法将代码块分配给变量,例如这种情况:

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!

【讨论】:

  • 接受了这个答案,因为它清楚地解释了这行 (buttonArray = {Button1, Button2};) 代码行中实际发生的情况。谢谢你的回答。
【解决方案2】:

尝试使用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

【讨论】:

  • 即使new[] 也不需要。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多