IndexOutOfRangeException with array.读取数组时的长度>0[1]



我正在在在线IDE上进行编码,该在线IDE不会揭示程序输入或stdout输出,在此特定情况下(输入太大(。

file视为任意字符串:

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

行号总是在我尝试访问splitted[1]的任何地方。这没有任何意义:如果splitted.Length > 0,则存在splitted[1]

这是在线IDE的错误吗?或者是否有任何条件,c#string []可以是lenght> 0,并在读取其值时,在[1]?

您正在检查数组是否长于0,然后尝试在数组中引用 second 元素。如果长度为1,那是错误。

如果您始终需要第二个元素,请检查数组至少有两个元素:

if (splitted.Length > 1)

另外,如果您要访问 first 元素:

string Test = splitted[0];

在C#中,数组索引从0开始。看起来您正在尝试访问splitted中的第一个元素的代码string Test = splitted[1];,但是由于索引开始于0,因此索引1中的元素将是第二个。

您想将其更改为string Test = splitted[0];

c#中的数组总是开始用0索引。

c#使用基于零的索引。拆分[0]可以保证存在于您的条件中,因为这是数组中的第一个元素。分裂[1]是数组中的第二个元素。

最新更新