C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

配列の境界外の処理が上手くできない

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■85857 / inTopicNo.1)  配列の境界外の処理が上手くできない
  
□投稿者/ sh (1回)-(2017/11/29(Wed) 14:10:16)

分類:[.NET 全般] 

2017/11/29(Wed) 14:11:17 編集(投稿者)
2017/11/29(Wed) 14:11:14 編集(投稿者)

初めまして
行き詰ってしまって上手くいかないので教えてください
ある配列を使い
PDFデータの 進む戻る処理をしてるんですが
ファイルが無い=配列要素に無い場合
TryでIndexOutOfRangeException 掴ませたたいのですが
そこまでいきません・・・
                
Dim i As Integer = Array.IndexOf(name_s, proda_name.Text)
Dim a As String() Directory.GetFiles(name_files_foder & name_s(i))
Try
n = n - 1
PDF.LoadFile(a(n))

Catch ex As IndexOutOfRangeException
MsgBox(ex.Message)
End Try

PDFロード時に n=-1になると
配列境界になるので
Catchで IndexOutOfRangeException に掴ませたいのですが
よろしくお願い致します。
引用返信 編集キー/
■85858 / inTopicNo.2)  Re[1]: 配列の境界外の処理が上手くできない
□投稿者/ 魔界の仮面弁士 (1485回)-(2017/11/29(Wed) 14:48:43)
No85857 (sh さん) に返信
> ファイルが無い=配列要素に無い場合
> TryでIndexOutOfRangeException 掴ませたたいのですが

IndexOutOfRangeException は「プログラムのバグ」に相当するものであり、
本来は Catch すべきではありません。

そのような引数を渡さないで済むよう、事前にチェックするのが正しい記述法です。

例外処理は、事前検証を行えないものに対して用いるようにします。
たとえば、データベース接続やネットワーク通信の失敗や、
ディスクの入出力エラー(権限不足、ディスク空き容量不足など)。



> Dim i As Integer = Array.IndexOf(name_s, proda_name.Text)
Array.IndexOf は、要素を見つけられなかった場合、-1 を返します。


> Dim a As String() Directory.GetFiles(name_files_foder & name_s(i))
代入式のイコールが抜けています。
また、この行は Try 句の中に含まれていないため、
i が -1 だった場合、name_s(i) へのアクセスは失敗します。
事前に If 文で i の値を判定しておかねばなりません。


なお、proda_name.Text が name_s 内に含まれているかを検出するだけなら、
 If name_s.Contains(proda_name.Text) Then
だけで判定できます。


> n = n - 1
> PDF.LoadFile(a(n))
a(n) という指定を行う場合、n の値は 0 以上 a.Length 未満でなければなりません。
上記の場合、変数 n の初期値はどこでセットされているのでしょうか?

また、GetFiles によって複数のファイルが返された場合、
 PDF.LoadFile(a(n))
によって、そのうちの 1 つだけしか処理されないようにも見えるのですが、
それは問題ないのでしょうか?
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ