コガネブログ

平日更新を目標にUnityやC#などのゲーム開発アレコレを書いていきます

【C#】Actionデリゲートのnullチェックを省略するための拡張メソッド

private Texture LoadTexture(Action<Texture> onLoaded = null)
{
    // ...
    
    if (onLoaded != null)
    {
        onLoaded(texture);
    }
}

例えばテクスチャを読み込む関数があって
読み込んだテクスチャを戻り値だけでなくコールバック関数でも渡せるようにしたとすると
コールバック関数が指定されてるかどうかのnullチェックを記述する必要があります

このnullチェックを省略するためには下記のような拡張メソッドを用意します

/// <summary>
/// 1 つのパラメーターを受け取る Action デリゲートを実行します
/// </summary>
/// <typeparam name="T">Action デリゲートのパラメーターの型</typeparam>
/// <param name="action">1 つのパラメーターを受け取る Action デリゲート</param>
/// <param name="arg">Action デリゲートのパラメーター</param>
public static void Call<T>(this Action<T> action, T arg)
{
    if (action != null)
    {
        action(arg);
    }
}
private Texture LoadTexture(Action<Texture> onLoaded = null)
{
    // ...
    
    onLoaded.Call(texture);
}

こうすることでnullチェック用のif文を記述する必要がなくなるので
ソースコードが綺麗になります