c# - 为什么这个二维数组初始化是非法的?

标签 c# .net

有人可以解释为什么下面的“板”初始化不起作用吗?这是我的代码:

public partial class frmSudoku : Form
{
   Label[,] board;    

   public frmSudoku()
   {
      InitializeComponent();
      board = {{lblS00, lblS01, lblS02, lblS03, lblS04, lblS05, lblS06, lblS07, lblS08},
                 {lblS10, lblS11, lblS12, lblS13, lblS14, lblS15,lblS16,lblS17, lblS18},
                 {lblS20, lblS21, lblS22, lblS22, lblS24, lblS25, lblS26, lblS27, lblS28},
                 {lblS30, lblS31, lblS32, lblS33, lblS34, lblS35, lblS36, lblS37, lblS38},
                 {lblS40, lblS41, lblS42, lblS43, lblS44, lblS45, lblS46, lblS47, lblS48},
                 {lblS50, lblS51, lblS52, lblS53, lblS54, lblS55, lblS56, lblS57, lblS58},
                 {lblS60, lblS61, lblS62, lblS63, lblS64, lblS65, lblS66, lblS67, lblS68},
                 {lblS70, lblS71, lblS72, lblS73, lblS74, lblS75, lblS76, lblS77, lblS78},
                 {lblS80, lblS81, lblS82, lblS83, lblS84, lblS85, lblS86, lblS87, lblS88}};
 }

我在 VS2019 上,每个逗号下面都有红色下划线 - 它们的错误消息只是“;预期”(这显然是不对的;我尝试用分号替换它只是为了看,红色下划线只是移动了在带有错误消息“只有赋值、调用、递减……可以用作语句”的标签下。我真的不知道为什么这是非法的 - 我尝试在公共(public)部分类下声明一个 2D int 数组并在 frmSudoku() 中类似地初始化它并且它工作正常。是什么让标签数组与众不同?

编辑:2D int 数组不能正常工作,红色下划线显示需要一段时间(哎呀)

最佳答案

这不是二维数组所独有的。使用 ECMA C# Standard 中的术语,array-initializer 仅在 array-creation-expression、字段声明或局部变量声明中有效。

例如,这是有效的:

// array-initializer as part of a local variable declaration
string[] strings = { "x", "y" };

但这不是:

string[] strings;
// This is just an assignment expression, not part of a variable declaration
strings = { "x", "y" };

您可以使用 *array-creation-expression( 虽然:

string[] strings;
strings = new string[] { "x", "y" };

等价物适用于您的二维示例:

board = new Label[,] {{ ... }};

关于c# - 为什么这个二维数组初始化是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839413/

相关文章:

c# - 如何在 .NET 中拆分(复制)流?

c# - 如何正确地将语句放入 try-catch block 中?

c# - Microsoft.WindowsAPICodePack.Shell 无法加载文件或程序集

.net - Oracle ODP.Net 与 Entity Framework 6 - 找不到 Entity Framework 数据库兼容提供程序

c# - csproj 根据操作系统复制文件

c# - 如何更改 C# .NET 3.5 中进度条的颜色?

c# - 是否应该将此列表初始值设定项行为报告为 Visual Studio C# 编译器中的错误?

c# - 访问对象的列表属性

c# - 有没有办法将英语动词转换为 C# 上的现在时

c# - 如何用C#制作一个发光的按钮?