我对C#数组有一个看似基本的问题。我是初学者,但这是一个真正的基本问题,现在已经让我结了半个多小时。我正在使用C#2010 Express。
此代码: -
string[] motionCam = new string[8];
motionCam[1] = "Stop";
报告错误:
无法在变量声明中指定数组大小(尝试 用'new'表达式初始化)
即使是基本的数组示例,我复制并粘贴了教育网站报告同样的错误,我也不知道为什么。
答案 0 :(得分:11)
其他答案表明你不能将这行代码放在类声明中但在方法体之外是正确的。我认为描述为什么你得到奇怪的错误信息可能会很有趣。编译器正在拼命试图找出X[Y] = Z;
的含义,并假设你的意思是:
X[] F = Z;
也就是说,你不小心把数组的大小放在数组声明中 - 这是最近学过C#的C程序员中一个非常常见的错误 - 并且省略了字段的名称。
编译器因此提供了它可以提供的最丰富的错误:您可能是一个C程序员,他忘记了数组的大小是在初始化程序中,而不是类型声明。
在这种情况下,猜测是完全错误的;这里的错误是您不小心将语句放在需要字段声明的位置。但大多数时候,这是一个合理的猜测。
答案 1 :(得分:5)
虽然您粘贴的代码有效,但您的问题是其他问题 也许你在班级宣布它。
motionCam[1] = "Stop";
是一个赋值而不是声明,这就是编译器喊叫的原因。
请参阅this有同样问题的人的问题。
底线是您不能在班级获得非声明声明。
答案 2 :(得分:5)
你把它放在课堂上。 (第二行)
把它放在一个方法中。
public partial class Form1 : Form
{
string[] motionCam = new string[8];
public Form1()
{
InitializeComponent();
motionCam[1] = "Stop";
}
}
答案 3 :(得分:1)
正如其他人所说,除了一个代码行之外,还有更多内容。在任何情况下,编译器正在寻找的特定事物(可能不是你想要的)是这样的:
var motionCam = new string[] { "Zero", "Stop" /*[1]*/, "Two" };
那是initializing with a 'new' expression
部分。
答案 4 :(得分:1)
尝试将此行放在方法中(可能是类构造函数):
motionCam[1] = "Stop";
问题是你正在尝试创建数组(这很好),然后在类声明中填充它(不是)。
答案 5 :(得分:1)
这是必须进入方法的代码。如果你把它直接放在一个类中,就会产生错误。
第一行是一个有效的声明,因此可以直接在一个类中使用 第二行是赋值语句,而不是声明。因此,它只能出现在方法中,而不能直接出现在类中。
将它放入这样的方法中:
static void MyMethod()
{
string[] motionCam = new string[8];
motionCam[1] = "Stop";
}
如果将此代码直接放在类中,C#编译器会将motionCam[1]
解释为类型。在C或C ++中,这将是一个motionCam
元素的数组,其大小为1
。在C#中,它无效。