繁体   English   中英

尝试int.parse多数组字符串

[英]trying to int.parse multi array string

我这样做:

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
}

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

有两个问题:

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

你的for循环应该是:

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

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

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

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

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

应该读:

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

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

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

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

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

对不起,我先给出了错误的答案。

改成

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

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

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

尝试这个:

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

Array.GetLength方法

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

另外值得一提的是int.Parse可能抛出一个FormatException ,考虑int.TryParse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM