C# String.split的问题

C# String.split的问题,c#,string,split,C#,String,Split,我对C有点陌生。使用拆分时出现问题。我认为它返回了一个字符串数组。但一旦它到达下面的最后一行,它就会崩溃,并说我无法访问它。禁止进入即使在拆分中,它也会找到多个“~”。我的问题有什么解决办法吗 String tempString=”“ while ((tempString = streamReader.ReadLine()) != null) { String [] split = tempString.Split('~');

我对C有点陌生。使用拆分时出现问题。我认为它返回了一个字符串数组。但一旦它到达下面的最后一行,它就会崩溃,并说我无法访问它。禁止进入即使在拆分中,它也会找到多个“~”。我的问题有什么解决办法吗

String tempString=”“

        while ((tempString = streamReader.ReadLine()) != null)
        {
            String [] split = tempString.Split('~');

            typeOfVehicle = split[0];
            manufactuer = split[1];
非常感谢


问题已解决。

您假设在拆分字符串时至少有2个元素。永远不要假设。在尝试访问索引之前,请始终检查数组的长度。

只要捕获异常,您很快就会发现正在读取的字符串有问题

String[] split = tempString.Split('~');

try
{
    typeOfVehicle = split[0];
    manufactuer = split[1];
}
catch
{
    Console.WriteLine("Oops! It didn't work.");
    Console.WriteLine("The offending string was \"{0}\"", tempString);
}

您是否检查了split.Length以查看数组中实际有多少(以及哪些)元素?您将它与null进行比较,但不检查它是否为空。如果返回的最后一个字符串无法拆分,那么它就不会有这些索引--请尝试使用while(!string.IsNullOrEmpty(tempString=streamReader.ReadLine()){…}是的,数组中填充了10个项。拆分效果非常好。字符串永远不会为空。当我进入调试器并查看拆分[1]时这是我想要的字符串,但我想我看到了问题所在。当写入文件时,是否可能会在空白处多放一行?如果OP检查长度而不执行代码,那么OP只会隐藏他有坏数据的事实。如果数据应该是干净的,那么这实际上隐藏了一个错误。如果要检查一个永远不应该为假的条件,那么OP最多应该抛出一个新的异常,该异常将继续传播错误,以便修复错误(无论它在哪里)。除非这是一个玩具应用程序,否则向控制台写入可能是传达错误的最糟糕方式。(相反,通过更好的消息传递抛出异常)不,我一直在我的prod系统中这样做。效果很好。例如,如果这是一个非控制台应用程序(即Windows或ASP.NET)的消费者可以调用的方法,那么你基本上只是扔掉了错误消息。为什么要采用一种仅适用于控制台应用程序的模式(这方面做得很差,因为你丢失了堆栈跟踪)?对不起,应该写“开玩笑”在那个评论旁边。很明显,这是一段代码,OP可以剪切并粘贴到控制台中来识别他的问题。人们希望他在真实的系统中没有遇到这个问题。OP对C#来说“有点新”。我假设他在“尝试”。拜托,开枪吧。