internal bool TryGetUserArgs <TEventType, TCallbackArgs>(EventCallback <TEventType, TCallbackArgs> callback, TrickleDown useTrickleDown, out TCallbackArgs userArgs) where TEventType : EventBase <TEventType>, new()
        {
            userArgs = default(TCallbackArgs);
            bool flag = callback == null;
            bool result;

            if (flag)
            {
                result = false;
            }
            else
            {
                EventCallbackList callbackListForReading = this.GetCallbackListForReading();
                long eventTypeId = EventBase <TEventType> .TypeId();

                CallbackPhase phase = (useTrickleDown == TrickleDown.TrickleDown) ? CallbackPhase.TrickleDownAndTarget : CallbackPhase.TargetAndBubbleUp;
                EventCallbackFunctor <TEventType, TCallbackArgs> eventCallbackFunctor = callbackListForReading.Find(eventTypeId, callback, phase) as EventCallbackFunctor <TEventType, TCallbackArgs>;
                bool flag2 = eventCallbackFunctor == null;
                if (flag2)
                {
                    result = false;
                }
                else
                {
                    userArgs = eventCallbackFunctor.userArgs;
                    result   = true;
                }
            }
            return(result);
        }
        public void RegisterCallback <TEventType, TCallbackArgs>(EventCallback <TEventType, TCallbackArgs> callback, TCallbackArgs userArgs, TrickleDown useTrickleDown = TrickleDown.NoTrickleDown) where TEventType : EventBase <TEventType>, new()
        {
            bool flag = callback == null;

            if (flag)
            {
                throw new ArgumentException("callback parameter is null");
            }
            long eventTypeId = EventBase <TEventType> .TypeId();

            CallbackPhase     phase             = (useTrickleDown == TrickleDown.TrickleDown) ? CallbackPhase.TrickleDownAndTarget : CallbackPhase.TargetAndBubbleUp;
            EventCallbackList eventCallbackList = this.GetCallbackListForReading();
            bool flag2 = eventCallbackList != null;

            if (flag2)
            {
                EventCallbackFunctor <TEventType, TCallbackArgs> eventCallbackFunctor = eventCallbackList.Find(eventTypeId, callback, phase) as EventCallbackFunctor <TEventType, TCallbackArgs>;
                bool flag3 = eventCallbackFunctor != null;
                if (flag3)
                {
                    eventCallbackFunctor.userArgs = userArgs;
                    return;
                }
            }
            eventCallbackList = this.GetCallbackListForWriting();
            eventCallbackList.Add(new EventCallbackFunctor <TEventType, TCallbackArgs>(callback, userArgs, phase));
        }