Unityのプログラムで良く見かける
ClickStartCallback?.Invoke();
NULLならエラーにならず、NULLでなければ処理を行ってくれる便利な記述だが、これって一体どういう理屈なのかわかっていなかったので、調べた。
どうやら、この記法は「Null 条件演算子」という機能のようで、C# 6.0から使えるようになったらしい。
じゃぁ、どこまで適用されるのか試してみた。
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チェック程度であれば、多用しても問題なさそうに感じるので、使っていこうと思う。