困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

C#の話~「?」って何?(Null 条件演算子)~

Unityのプログラムで良く見かける

ClickStartCallback?.Invoke();

NULLならエラーにならず、NULLでなければ処理を行ってくれる便利な記述だが、これって一体どういう理屈なのかわかっていなかったので、調べた。

どうやら、この記法は「Null 条件演算子」という機能のようで、C# 6.0から使えるようになったらしい。

docs.microsoft.com

じゃぁ、どこまで適用されるのか試してみた。

using System;
using UnityEngine;
using UnityEngine.UI;

public class NullConditionalOperatorTest : MonoBehaviour {
    private class CallClass
    {
        public CallClass()
        {

        }

        public void CallFunc()
        {
            Debug.Log("CallFunc");
        }

    };

    private CallClass TestCallClass;
    private Button TestButton;
    private Action TestAction;

    // Start is called before the first frame update
    void Start()
    {
        // 全て、インスタンスを生成していないので、本来であればNULLエラーになるはずだが
        // 自作クラスもOK
        TestCallClass?.CallFunc();

        // UnityのオブジェクトクラスもOK
        TestButton?.GetComponent<GameObject>();

        // 頻繁に使うと思うActionも、当然OK
        TestAction?.Invoke();
    }
}

ここまでわかれば、NULLチェック程度であれば、多用しても問題なさそうに感じるので、使っていこうと思う。