Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 初始化数组时需要一个常量值_C# - Fatal编程技术网

C# 初始化数组时需要一个常量值

C# 初始化数组时需要一个常量值,c#,C#,我正在开发一个图像处理软件 int size = 3; int[,] kernel = new int[size, size] { {1, 2, 1}, {2, 4, 2}, {1, 2, 1} }; 当我编译代码时,从size变量中有一条编译错误消息“需要一个常量值”。我知道我可以在内核数组初始化中设置3,或者使我的大小保持不变。我要问的是这个错误背后的技术原因,因为这个错误对我来说没有任何意义。您可以通过只指定大小(可能是可变的)来创建一个

我正在开发一个图像处理软件

int size = 3;

int[,] kernel = new int[size, size] {
        {1, 2, 1},
        {2, 4, 2},
        {1, 2, 1}
};

当我编译代码时,从
size
变量中有一条编译错误消息“需要一个常量值”。我知道我可以在
内核
数组初始化中设置3,或者使我的
大小
保持不变。我要问的是这个错误背后的技术原因,因为这个错误对我来说没有任何意义。

您可以通过只指定大小(可能是可变的)来创建一个空值数组,或者在初始值设定项中列出值并可选地指定一个常量大小。但不能将初始值设定项与非常量大小组合。对于初始值设定项,如果希望确保初始值设定项生成特定大小的数组,则允许为大小指定常量值


只要去掉大小参数,您的初始值设定项列表已经指定了大小。

编译器需要数组列组的常量表达式。您可以将
size
声明为
const int
,也可以让编译器从初始化表达式中计算出来:

    int[,] kernel = new int[,] {
            {1, 2, 1},
            {2, 4, 2},
            {1, 2, 1}
    };

在delclaration中,您正在添加元素,因此不需要指定大小

因此,这将起作用:

int[,] kernel = new int[,] { 
        {1, 2, 1}, 
        {2, 4, 2}, 
        {1, 2, 1} 
}; 

这是我的问题——想想看,这是有道理的。不幸的是,我的“借口”是我还必须在VB.Net中编写代码。(您可以在VB.Net中使用:
Dim values As Object()=新对象(columnIds.Length-1){}
,但仅在C#中使用:
Object[]values=新对象[columnIds.Length]