2017-01-07 73 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。主要是由於嘗試獲取實際上比您正在查找的索引小的數組內相應索引的值所致。