我这样做:
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
}
我得到一个错误,说“索引范围是数组的限制”(或类似的东西,错误是丹麦语)。
答案 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
}
获取一个32位整数,表示数组指定维度中的元素数。
答案 6 :(得分:0)
另外值得一提的是,int.Parse
可能会引发FormatException
,请考虑int.TryParse
。