【C#】拡張メソッドについてのメモ
拡張メソッドについて
書き方
文字列を列挙型に変換する拡張メソッドの例
public enum Weapon { NONE = -1, HINOKINO_BOU, IRON_SWORD, EXCALIBUR, } public static class StringExtension { public static Weapon ToWeapon(this string self) { switch (self) { case "ひのきの棒": return Weapon.HINOKINO_BOU; case "鉄の剣": return Weapon.IRON_SWORD; case "エクスカリバー": return Weapon.EXCALIBUR; } return Weapon.NONE; } }
呼び出し側
string weaponName = "エクスカリバー"; weaponName.ToWeapon(); // Weapon.EXCALIBUR
注意
nullを拡張メソッドに通すことができるが、内部でエラーする可能性がある
using UnityEngine; public static class GameObjectExtension { public static Weapon ToWeapon(this GameObject self) { return self.name.ToWeapon(); // selfがnullの場合にnameにアクセスできない } }
GameObject obj; obj.ToWeapon();
対処法
- nullの可能性がある変数などでは拡張メソッドを呼ばない
- 拡張メソッド内でnullチェックを行なう
using UnityEngine; public static class GameObjectExtension { public static Weapon ToWeapon(this GameObject self) { if(self != null){ return self.name.ToWeapon(); } else{ return ""; } } }