2017-01-07 5 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を読むことができます。

私は文字列に文字列[]からの変換と間違って何かをやっていますか?

私はここでの問題を見ていると思う
+0

「選択」コールで何をしようとしていますか?ファイル内のいくつかの行に文字がない場合は、例外が発生します。 'CurrentLine_Array.Length'をチェックして、配列に何かがあるかどうかを調べます。 – cubrr

+0

OK、それは私のせいでした... 私の** gcode **ファイル内の1行は文字をまったく取りませんでした。 私はループ全体をtry {}とcatch {}関数に入れて、今は動作します:) –

+1

ここで例外をキャッチする必要はありません...!配列の長さが0より大きいかどうかをチェックするだけです! – cubrr

答えて

0

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

はおそらく

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

として、それが現在である方法をお読みください、それはおそらく、ファイルを見つけていないと、ヌルを返しています。文字列はnullになることが許されているので、ループに入ると、存在しない配列から値を取得しようとすると、ループします。

+0

ああ、ちょうどタイプエラーがありました...このエラーは私の実際のプログラムではありません。そうでなければ、** foreach ** - ループで直接RuntimeExceptionを与えてしまいます。 ところで、解決策は元の質問のコメントにあります:) –

+0

ああ、うれしい、それを見ていない。私はいつも私がプログラミングしているときに試してキャッチして、できる限りエラー報告に自分の価値の多くを捨てる、どういうことが起こっているのか正確に知っている。 – Slipoch

0

おそらくファイルに空白行が1つ以上あります。

配列のサイズは、そのような0

よりも大きい場合は、簡単にチェックすることにより、この問題を解決することができます

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

IndexOutOfRangeException。は主に、探しているインデックスよりも実際に小さい配列内の対応するインデックスの値を取得しようとしているために発生します。

関連する問題