我这样做:
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
}
我收到一个错误,说“索引范围是数组的限制”(或类似的东西,错误是丹麦语)。
我这样做:
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,作为“第一个”维度的大小。返回 2的调用GetLength(1)
,因为第二个维度的大小为 2。(不过,您不需要这样做,因为您基本上是在硬编码您想要每个“行”的第二个“列”的知识。)
有关更多详细信息,请参阅文档Array.GetLength()
。
您的数组边界在循环中不正确:
for(int i = 0; i <= string1.Length; i++)
应该读:
for(int i = 0; i < string1.GetLength(0); i++)
有两件事是错误的:<=
vs<
意味着您将一个项目走得太远,并.Length
返回数组的总长度 (6),而GetLength(0)
后者返回第一个维度的长度 (3)。
您已经有了正确的答案,我会更新我的答案以更正它。正确的迭代应该是
for (int i = 0; i < string1.GetLength(0); i++)
{
b = int.Parse(string1[i, 1]);
}
因为i
代表第一个维度的长度,而fixed1
会返回数字,也就是第二个元素。
我很抱歉我首先给出的错误答案。
改成
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
。