【问题标题】:C# error creating an arrayC# 创建数组时出错
【发布时间】:2015-03-04 15:51:50
【问题描述】:

我需要给一个二维数组赋值。 我可以使用多个“myArray[x,y]”语句来做到这一点,但我想使用另一种方法(因为我将拥有包含许多行/列的数组) - 请参阅代码:

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]);

谢谢

【问题讨论】:

  • 那些类型的数组初始化器只有在你第一次声明变量时才起作用。

标签: c# arrays dimensions


【解决方案1】:

我不知道您是否特别希望对值进行硬编码,但如果您知道数组的维度始终为[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");
        }
    }
}

【讨论】:

    【解决方案2】:

    正如您提到的,您需要以这种方式使用它,那么您可以通过声明一个临时变量来初始化它的值,然后将临时变量设置为公共变量,如下所示:

    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;    
    }
    

    【讨论】:

    • 我基本上同意这个答案,除了没有必要将它分配给临时变量。在一组大括号前使用 new 关键字将允许此语法在未声明变量时起作用(即 myArray = new string[,] { {"1", "1" }, {"1", "1" } })。
    • 好的,我知道我遇到了范围问题,并且我尝试在 {...} 对定义的同一范围内两次使用相同的名称声明我的数组。感谢您的帮助。
    • 注意:不需要创建临时变量,见here
    【解决方案3】:

    为什么不只是:

    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 条件是否对您的情况很重要。

    如果您要问其他问题,请澄清。

    【讨论】:

      【解决方案4】:

      您还应该考虑使用循环来填充大型数组。

      var size = 1;
      for(int i = 0; i <= size; i++)
      {
          myArray[0, i] = x.ToString();
          myArray[i, 0] = x.ToString();
      }
      

      【讨论】:

        【解决方案5】:

        参考other question you asked,这样试试:

            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[,] 的数据类型(对于二维数组),如果不这样做想要预先指定数组大小(你不需要这样计算元素)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-23
          相关资源
          最近更新 更多