C# 带有数组的IndexOutOfRangeException.Length>;读取数组[1]时为0
我在一个在线IDE上编码,它既不公开程序输入,也不公开标准输出,在这种特殊情况下(输入太大) 将C# 带有数组的IndexOutOfRangeException.Length>;读取数组[1]时为0,c#,C#,我在一个在线IDE上编码,它既不公开程序输入,也不公开标准输出,在这种特殊情况下(输入太大) 将文件视为任意字符串: if (!string.IsNullOrEmpty(file)) { string[] splitted = file.Split('.'); if (splitted.Length > 0) { string Test = splitted[1]; } } 上面的代码如何可能返回此错误: UNHANDLED EXCEPTI
文件
视为任意字符串:
if (!string.IsNullOrEmpty(file))
{
string[] splitted = file.Split('.');
if (splitted.Length > 0)
{
string Test = splitted[1];
}
}
上面的代码如何可能返回此错误:
UNHANDLED EXCEPTION: System.IndexOutOfRangeException: ~message masked~
at Solution.Solution.Main (System.String[] args) [0x000e4] in solution.cs:6
行号总是在我尝试访问拆分的[1]的任何位置。这没有任何意义:如果splitted.Length>0
则splitted[1]
存在
这是在线IDE的一个bug吗?或者是否存在这样的情况,即C#string[]的长度大于0,并在读取[1]处的值时抛出IndexOutOfRangeException?您正在检查数组是否长于0,然后尝试引用数组中的第二个元素。如果长度为1,则为错误 如果始终需要第二个元素,请检查阵列是否至少有两个元素:
if (splitted.Length > 1)
或者,如果您尝试访问第一个元素:
在c#中,数组索引从0
开始。它看起来像是在代码行string Test=splitted[1]
表示您正试图访问拆分的中的第一个元素,但由于索引从0
开始,索引1
中的元素将是第二个
您希望将其更改为string Test=splitted[0]代码>C中的数组总是以0开始索引。您应该尝试拆分[0]C#使用基于零的索引。拆分的[0]保证存在于条件中,因为它是数组中的第一个元素。Splitted[1]是数组中的第二个元素。如果长度
为1,则Splitted
将有一个元素,可通过表达式Splitted[0]
访问。因此,splitted[1]
可能会使用超出范围的索引。哦,我的上帝。。。我真傻。不知何故,我没有想到分割的长度总是>0。谢谢。@Saturnix“在计算机科学中有两件困难的事情:缓存失效、命名和一个一个的错误。”
string Test = splitted[0];