【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 "";
        }
    }
}

参考リンク

https://ufcpp.net/study/csharp/sp3_extension.html