[英]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
}
获取一个32位整数,表示Array指定维度中的元素数。
另外值得一提的是int.Parse
可能抛出一个FormatException
,考虑int.TryParse
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.