2017-01-07 187 views
1

我有一个非常简单的代码:转换字符串字符串数组:运行时异常

using System; 
using System.Linq; 
using System.Windows; 
using System.IO; 

namespace _3DPrinter_Test1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     {  
      InitializeComponent(); 

      foreach (string CurrentLine_Raw in File.ReadAllLines( 
       "@D:\3Dprinter\TestObject1.gcode")) 
      { 
       string[] CurrentLine_Array = 
        CurrentLine_Raw.Select(c => c.ToString()).ToArray(); 

       TextBox_Test.Text = CurrentLine_Array[0]; 
      } 
     } 
    } 
} 

线

TextBox_Test.Text = CurrentLine_Array[0]; 

给了我一个IndexOutOfRangeException

在我看来发生,因为这行:

string[] CurrentLine_Array = CurrentLine_Raw.Select(c => c.ToString()).ToArray(); 

但是,当我用下面这行替换上面的:

string[] CurrentLine_Array = { "Hello World" }; 

然后我可以在我的文本框读取的Hello World

我做从有毛病转换字符串的String []

+0

你究竟在用'Select'调用来做什么?如果文件中的某一行没有任何字符,则会发生异常。检查'CurrentLine_Array.Length'来查看数组中是否有任何内容。 – cubrr

+0

好的,这是我的错...... 我**。gcode **文件中的一行根本不包含任何字符。 我只是把整个循环放到try {}和catch {}函数中,并且它现在可以工作:) –

+1

您不需要...在这里捕获异常!只要检查数组的长度是否大于0! – cubrr

回答

0

我想我在这里看到了问题:

File.ReadAllLines("@D:\3Dprinter\TestObject1.gcode") 

或许应该理解为

File.ReadAllLines(@"D:\3Dprinter\TestObject1.gcode") 

它目前,它可能是没有找到一个文件,并返回一个空的方式;因为允许字符串为空,它会进入循环一次,然后当它尝试从不存在的数组中获取值时,它会翻转。

+0

哦,只是发生了类型错误......这个错误不在我的实际程序中,否则它会直接在** foreach ** - 循环中给我一个RuntimeException。 顺便说一句,解决方案是在原来的问题的意见:) –

+0

啊欢呼声,没有看到。我在编程时总是使用try和catch,并尽可能多地抛出错误报告的值,这样我就知道到底发生了什么。 – Slipoch

0

可能是文件中有一个或多个空行。

可以通过检查数组大小是大于0

那样很容易地解决这个问题:

if (CurrentLine_Array.Length > 0) 
     { 
      // DO SOMETHING 
     } 

IndexOutOfRangeException。主要是由于尝试获取实际上比您正在查找的索引小的数组内相应索引的值所致。