尝试int.parse多数组字符串

时间:2012-08-29 12:49:49

标签: c# arrays for-loop multidimensional-array

我这样做:

string[,] string1 = {{"one", "0"},{"Two", "5"},{"Three","1"}};
int b = 0;

for(int i = 0; i <= string1.Length; i++)
{
     b = int.Parse(string1[i, 1]); // Error occurs here
}

我得到一个错误,说“索引范围是数组的限制”(或类似的东西,错误是丹麦语)。

7 个答案:

答案 0 :(得分:8)

有两个问题:

  • string1.Length将返回6,因为这是数组的长度
  • 您正在使用<=进行比较,因此它实际上会尝试迭代7次。

您的for循环应为:

for (int i = 0; i < string1.GetLength(0); i++)

此处对GetLength(0)的调用将返回3,作为“第一个”维度的大小。对GetLength(1)的调用返回2,因为第二个维度的大小为2.(你不需要那个,因为你基本上硬编码你想要每个“第二个”列的知识“行”。)

有关详细信息,请参阅Array.GetLength()的文档。

答案 1 :(得分:7)

循环中的数组边界不正确:

for(int i = 0; i <= string1.Length; i++) 

应为:

for(int i = 0; i < string1.GetLength(0); i++) 

有两件事是错误的:<=<意味着你过了一个项目,.Length返回数组的总长度(6)与GetLength(0)返回第一个维度的长度(3)。

答案 2 :(得分:2)

你已经有了正确的答案,我会更新我的纠正它。要正确的迭代应该是

        for (int i = 0; i < string1.GetLength(0); i++)
        {
            b = int.Parse(string1[i, 1]);
        }

因为i代表第一个维度的长度,而固定的1将返回数字,这是第二个元素。

我很抱歉我先给出了错误的答案。

答案 3 :(得分:0)

更改为

for(int i = 0; i <= string1.GetLength(0); i++) 
{ 
b = Int32.Parse(string1[i][0]);
}

您的代码引用索引1而不是0引起异常,称为Array out of bound

答案 4 :(得分:0)

i <= string1.Length更改为i < string1.Length

答案 5 :(得分:0)

试试这个:

for(int i = 0; i < string1.GetLength(0) ; i++)
{
     b = int.parse(string1[i, 0]); // Error occurs here
}

Array.GetLength Method

获取一个32位整数,表示数组指定维度中的元素数。

答案 6 :(得分:0)

另外值得一提的是,int.Parse可能会引发FormatException,请考虑int.TryParse