Unity

【C#】Listと配列にTryGetValueを実装する【IndexOutOfRange対策】

【C#】Listと配列にTryGetValueを実装する【IndexOutOfRange対策】
記事内に商品プロモーションを含む場合があります

IndexOutOfRangeExceptionはよく遭遇してしまう例外の1つです。

コードを書く人が気をつけていても、例えばUnityで配列の要素数をエディタから自由に設定できるようにしておくことも多いでしょう。

設定ミス自体を避けることができれば良いですが難しい場合もあります。

最低限Exceptionでアプリが動作を停止してしまうことは防ぎたいものです。

try-catchを仕込んでいくのも良いかと思いますが、例外の発生自体を防ぐ方法としてDictionary型で安全に値を取得する「TryGetValue」をListと配列にも拡張メソッドで実装するという方法がお手軽なのでオススメです。

ソースコード全文

解説

TryGetValueは安全に値を取得することを目的としているため、indexが範囲外だった場合以外にも要素がnullであればfalseを返すようにしています。

nullでも構わないケースであれば、別途用意してあるIsIndexOutOfRangeを判定に利用すれば大丈夫です。

失敗した場合は型ごとのデフォルト値を受け取ります。

Unityでの使用例


TryGetValueを実行した結果としてtrueが返ってきた時だけ処理を実行するようにします。

outでのパラメータの受け取り先(この例ではvalue)は、以前までは事前に変数宣言しておく必要がありました。

C#7.0以降は、メソッド実行時についでに宣言できるようになったので、if文の中でまとめて書くことができて便利です!