双问号(??)是一个单元运算符,其左右两边数据类型必须是相同类型或能隐形转换类型的。意思是,首先检测左边的值,若为Null,那么整个表达式取值为右侧的值,否则为左侧的值。
而在unity3d引擎中,Object类型的物体是有单独的初始值的并非null,所以使用双问号操作符会导致判断错误问题
具体举例如下
public class Singleton<T> : MonoBehaviour where T : Component
{
static T _this;
public static T This
{
get
{
_this = _this ?? FindObjectOfType<T>();//错误,因为Object类型初始值并非null
_this = _this == default(T) ? FindObjectOfType<T>() : _this;//正确,所