ToLua中判断引用的C#对象是否为nil

C#层对象已经删除了,但是lua层判断不为nil。然后lua调用了,又会报nil的错误。

这里提供了一种判断方式。

lua里的判断。这个Util.IsNull()是C#层代码。

function HelperFunc.IsNull(obj)
   if obj == nil then 
      return true
   end
   return Util.IsNull(obj)
end
        public static bool IsNull(object o)
        {
            if (o is UnityEngine.Object)
            {
                return (o as UnityEngine.Object) == null;
            }

            return o == null;
        }

这里是类似的情况。这里有一句话说的很对。ngx.null就是一个代表null的userdata结构,类似一个自定义的类,但是没有什么具体含义,同时文档里面也提到了类似的值还有cjson.null,以后小心被坑。

打印这时候的typeof(obj),显示的是userdata,他不是lua的nil,是C#的null。对其内容操作,报的是nil的错。

报错代码:

    if obj ~= nil then
         obj.gameObject:SetActive(true)//报错是这行,attempt to index gameobject on a nil value
    return obj
原文地址:https://www.cnblogs.com/kuluodisi/p/14050668.html