C# 创建数组时出错
C# error creating an array
我需要为二维数组赋值。
我可以使用多个 "myArray[x,y]" 语句来做到这一点,但我想使用另一种方法(因为我将拥有包含许多 lines/columns 的数组)- 参见代码:
int x;
x = 1;
string[,] myArray = new string[2, 2];
if (x == 1)
{
//does not work : why? Would be easier to populate a big array using this
//myArray=
//{
// {"1", "1" },
// {"1", "1" }
//} ;
//works, but I need above code to work if possible
myArray[0, 0] = "1";
myArray[0, 1] = "1";
myArray[1, 0] = "1";
myArray[1, 1] = "1";
}
else if (x == 2)
//does not work
//myArray=
//{
//{"2", "2" },
//{"2", "2" }
//} ;
myArray[0, 0] = "2";
myArray[0, 1] = "2";
myArray[1, 0] = "2";
myArray[1, 1] = "2";
}
MessageBox.Show(myArray[0,0]);
谢谢
为什么不:
if(x == 1 || x == 2) {
for(int row = 0; row < ROW_COUNT; row ++)
{
for(int col = 0; col < COL_COUNT; col++)
{
myArray[row, col] = x.ToString();
}
}
}
不确定 if
条件对您的情况是否重要。
如果您问的是其他问题,请说明。
您还应该考虑使用循环来填充大型数组。
var size = 1;
for(int i = 0; i <= size; i++)
{
myArray[0, i] = x.ToString();
myArray[i, 0] = x.ToString();
}
我不知道您是否特别希望对这些值进行硬编码,但如果您知道数组的维度始终为 [2, 2]
,则可以遍历所需的所有 x 值。
var totalEntries = 10;
for (var x = 1; x <= totalEntries; x++)
{
for (var i = 0; i < 2; i++)
{
for (var j = 0; j < 2; j++)
{
myArray[i, j] = x.toString("G");
}
}
}
正如您提到的那样需要使用它,那么您可以通过声明一个临时变量来初始化它的值然后将临时变量设置为 public 来做一个解决方法,比如以下:
int x;
x = 1;
string[,] myArray = new string[2, 2];
if (x == 1)
{
string[,] myArrayTemp = { {"1", "1" }, {"1", "1" } };
}
else if (x == 2)
{
string[,] myArrayTemp = { {"2", "2" }, {"2", "2" } };
myArray = myArrayTemp;
}
参照,简单的试一下:
int x;
x=1;
string[,] myArray;
switch (x)
{
case 1:
myArray = new string[,]{ { "1", "1" }, { "1", "1" } }; //OK
break;
case 2:
myArray = new string[,]{ { "2", "2" }, { "2", "2" } }; //OK
break;
}
您不能缩短这些作业,即
myArray = { { "2", "2" }, { "2", "2" } };
不允许(语法错误),因为在 C# 中,您总是需要 new
关键字来创建新对象和数据类型 string[,]
(对于两个 -维数组)如果不想事先指定数组大小(你不需要这样计算元素)。
我需要为二维数组赋值。 我可以使用多个 "myArray[x,y]" 语句来做到这一点,但我想使用另一种方法(因为我将拥有包含许多 lines/columns 的数组)- 参见代码:
int x;
x = 1;
string[,] myArray = new string[2, 2];
if (x == 1)
{
//does not work : why? Would be easier to populate a big array using this
//myArray=
//{
// {"1", "1" },
// {"1", "1" }
//} ;
//works, but I need above code to work if possible
myArray[0, 0] = "1";
myArray[0, 1] = "1";
myArray[1, 0] = "1";
myArray[1, 1] = "1";
}
else if (x == 2)
//does not work
//myArray=
//{
//{"2", "2" },
//{"2", "2" }
//} ;
myArray[0, 0] = "2";
myArray[0, 1] = "2";
myArray[1, 0] = "2";
myArray[1, 1] = "2";
}
MessageBox.Show(myArray[0,0]);
谢谢
为什么不:
if(x == 1 || x == 2) {
for(int row = 0; row < ROW_COUNT; row ++)
{
for(int col = 0; col < COL_COUNT; col++)
{
myArray[row, col] = x.ToString();
}
}
}
不确定 if
条件对您的情况是否重要。
如果您问的是其他问题,请说明。
您还应该考虑使用循环来填充大型数组。
var size = 1;
for(int i = 0; i <= size; i++)
{
myArray[0, i] = x.ToString();
myArray[i, 0] = x.ToString();
}
我不知道您是否特别希望对这些值进行硬编码,但如果您知道数组的维度始终为 [2, 2]
,则可以遍历所需的所有 x 值。
var totalEntries = 10;
for (var x = 1; x <= totalEntries; x++)
{
for (var i = 0; i < 2; i++)
{
for (var j = 0; j < 2; j++)
{
myArray[i, j] = x.toString("G");
}
}
}
正如您提到的那样需要使用它,那么您可以通过声明一个临时变量来初始化它的值然后将临时变量设置为 public 来做一个解决方法,比如以下:
int x;
x = 1;
string[,] myArray = new string[2, 2];
if (x == 1)
{
string[,] myArrayTemp = { {"1", "1" }, {"1", "1" } };
}
else if (x == 2)
{
string[,] myArrayTemp = { {"2", "2" }, {"2", "2" } };
myArray = myArrayTemp;
}
参照
int x;
x=1;
string[,] myArray;
switch (x)
{
case 1:
myArray = new string[,]{ { "1", "1" }, { "1", "1" } }; //OK
break;
case 2:
myArray = new string[,]{ { "2", "2" }, { "2", "2" } }; //OK
break;
}
您不能缩短这些作业,即
myArray = { { "2", "2" }, { "2", "2" } };
不允许(语法错误),因为在 C# 中,您总是需要 new
关键字来创建新对象和数据类型 string[,]
(对于两个 -维数组)如果不想事先指定数组大小(你不需要这样计算元素)。