static public bool CheckDelegateType(Type type, IntPtr L, int pos) { LuaTypes luaType = LuaDLL.lua_type(L, pos); switch (luaType) { case LuaTypes.LUA_TNIL: return(true); case LuaTypes.LUA_TUSERDATA: int udata = LuaDLL.tolua_rawnetobj(L, pos); if (udata != -1) { ObjectTranslator translator = ObjectTranslator.Get(L); object obj = translator.GetObject(udata); return(obj == null ? true : type == obj.GetType()); } return(false); case LuaTypes.LUA_TFUNCTION: /*int udata1 = LuaDLL.tolua_rawnetobj(L, pos); * * if (udata1 != -1) * { * ObjectTranslator translator = ObjectTranslator.Get(L); * object obj = translator.GetObject(udata1); * //return obj == null ? true : type == obj.GetType(); * * if (obj != null) * { * if (obj is Delegate dd) * { * int a = dd.Method.GetHashCode(); * int ddc = dd.GetHashCode(); * int tc = type.GetHashCode(); * * * // dd.Target * // type.IsEquivalentTo(dd.GetType()); * * return ddc == tc ? true : false; * //return obj == type; * //return (Delegate)obj; * } * } * else * { * return true; * } * } * return false;*/ //return LuaDLL.luaL_checktype LuaFunction func = ToLua.ToLuaFunction(L, pos); Delegate del = DelegateFactory.CreateDelegate(type, func); DelegateFactory.RemoveDelegate(del, func); return(true); //LuaFunction func = ToLua.ToLuaFunction(L, pos); //object oo = ToLua.ToObject(L, pos); //ToLua.CheckDelegate<OnSceneNameChanged>(L, pos); //Delegate.Equals(); //return oo.GetType() == type; //ToLua.CheckDelegate //DelegateTraits<type>.Create(func); //OnSceneNameChanged arg1 = (OnSceneNameChanged)ToLua.CheckDelegate<OnSceneNameChanged>(L, pos); //Type t = GetNullableType(type); //return t == typeof(LuaFunction); default: return(false); } }