エラーの対処方法

【C# sharp】IndexOutOfRangeExceptionの5つの発生原因と対処方法

ChatGPTのAPIを使わずに自動化することが可能です。
下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。

C#のIndexOutOfRangeExceptionの対処法

C#でプログラムを書いていると、配列やリストなどのコレクションの範囲外の要素にアクセスしようとしたときに、「IndexOutOfRangeException」

インデックスが配列の境界外です。

というエラーが発生することがあります。

この記事では、そのエラーに対する対処方法を5つ紹介します。
それぞれのケースでエラーが出るソースコードと、それを対処したソースコードを示し、その解説を行います。

サルモリ
そうなんだ。配列の範囲外にアクセスするとエラーになるんだね。どうやって対処すればいいのかな?

C#のエラー一覧はコチラ

【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法

ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...

続きを見る

ケース1: 配列の長さを確認する

配列の範囲外にアクセスしようとすると、IndexOutOfRangeExceptionが発生します。

それは配列の長さを確認することです。例をみてみましょう!

エラーが発生するソースコード



上記のコードでは、配列の範囲外の要素にアクセスしようとしているため、IndexOutOfRangeExceptionが発生します。

対処後のソースコード



対処後のコードでは、forループの終了条件を配列の長さ(array.Length)にしています。
したがって、配列の範囲外にアクセスすることはありません。

 出力結果
0 0 0 0 0 
サルモリ
なるほど、配列の長さを確認すれば、範囲外にアクセスすることはないんだね。

ケース2: 範囲チェックを行う

また、アクセスしようとするインデックスが配列の範囲内にあることを確認することもできます。

エラーが発生するソースコード



上記のコードでは、配列の範囲外の要素にアクセスしようとしているため、IndexOutOfRangeExceptionが発生します。

対処後のソースコード



このコードでは、indexが配列の範囲内にあることを確認してから配列にアクセスしています。
そのため、範囲外の要素にアクセスすることはなく、IndexOutOfRangeExceptionは発生しません。

 出力結果
0 
サルモリ
ああ、配列の範囲を超えてアクセスしようとする前にチェックすれば、エラーを避けられるんだね!

ケース3: Try/Catchを使用する

Try/Catchブロックを使用して、エラーが発生したときの処理を記述することもできます。

エラーが発生するソースコード



上記のコードでは、配列の範囲外の要素にアクセスしようとしているため、IndexOutOfRangeExceptionが発生します。

対処後のソースコード



このコードでは、tryブロック内でIndexOutOfRangeExceptionが発生すると、すぐにcatchブロックが実行され、エラーメッセージが表示されます。
したがって、プログラムはクラッシュせずに続行されます。

 出力結果
Caught an exception: Index was outside the bounds of the array. 
サルモリ
なるほど、エラーが発生したときに何をするかを指定するために、try/catchブロックを使うんだね。これならプログラムがクラッシュすることなく、エラーメッセージを表示してくれるんだね!

ケース4: リストの範囲チェックを行う

リストでも、範囲外の要素にアクセスしようとすると、同じくIndexOutOfRangeExceptionが発生します。
しかし、リストの場合は、Countプロパティを使用して範囲チェックを行うことができます。

エラーが発生するソースコード



上記のコードでは、リストの範囲外の要素にアクセスしようとしているため、IndexOutOfRangeExceptionが発生します。

対処後のソースコード



このコードでは、indexがリストの範囲内にあることを確認してからリストにアクセスしています。
そのため、範囲外の要素にアクセスすることはなく、IndexOutOfRangeExceptionは発生しません。

 出力結果
5 
サルモリ
リストでも同じことができるんだね。でも、リストの場合は「Count」を使うんだね!

ケース5: Indexerを使って安全にアクセスする

Indexerを使用して、範囲外の要素にアクセスしたときにデフォルト値を返すようにする方法もあります。

エラーが発生するソースコード



上記のコードでは、配列の範囲外の要素にアクセスしようとしているため、IndexOutOfRangeExceptionが発生します。

対処後のソースコード



このコードでは、新しいSafeListクラスを作成し、そのインデクサーで範囲チェックを行っています。
範囲外のインデックスにアクセスしようとすると、インデクサーはデフォルト値(この場合は0)を返します。
したがって、IndexOutOfRangeExceptionは発生しません。

 出力結果
0 
サルモリ
おお、これなら範囲外にアクセスしても安全にデフォルト値が返ってくるんだね!便利だね!

C#のLinqを徹底的に学びたい方は画像をクリックしてご覧ください!
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版

まとめ

C#では、配列やリストの範囲外の要素にアクセスしようとすると、IndexOutOfRangeExceptionが発生します。
これを防ぐためには、範囲チェックを行ったり、try/catchブロックを使用したり、インデクサーをオーバーライドするなどの方法があります。

これらの方法を適切に使用することで、IndexOutOfRangeExceptionを予防し、アプリケーションの安定性を向上させることができます。
プログラミングにおいては、エラーを予防することが重要です。
それにより、ユーザー体験を向上させ、アプリケーションの信頼性を確保することができます。
しかし、すべてのエラーを予防することは不可能です。
したがって、エラーが発生した場合の適切な処理も同様に重要です。

これらのテクニックを学び、自分のプロジェクトで活用してみてください。
それにより、より良いソフトウェアを開発することができます。

サルモリ
最後まで読んでくれてありがとう!!

最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!

C#のエラー一覧はコチラ

【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法

ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...

続きを見る

-エラーの対処方法

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock