예제 #1
0
        /// <summary>
        /// Attempts to invoke an instance method.
        /// </summary>
        public bool TryInvoke(object inTarget, StringHash32 inId, StringSlice inArguments, object inContext, out object outResult)
        {
            var method = FindMethodWithRedirect(ref inTarget, inId);

            if (method == null)
            {
                outResult = null;
                return(false);
            }

            TempList16 <StringSlice> args = default(TempList16 <StringSlice>);

            inArguments.Split(m_StringSplitter, StringSplitOptions.None, ref args);
            return(method.TryInvoke(inTarget, args, inContext, m_StringConverter, out outResult));
        }
예제 #2
0
            public bool TryInvoke(object inTarget, TempList16 <StringSlice> inArguments, object inContext, IStringConverter inConverter, out object outReturnValue)
#endif // EXPANDED_REFS
            {
                if (inArguments.Count < m_RequiredParameterCount || inArguments.Count > m_Parameters.Length)
                {
                    UnityEngine.Debug.LogErrorFormat("[MethodCache] Expected between {0} and {1} arguments to {2}::'{3}', got {4} instead",
                                                     m_RequiredParameterCount, m_Parameters.Length - m_ContextOffset, Method.DeclaringType.Name, Id.ToDebugString(), inArguments.Count);

                    outReturnValue = null;
                    return(false);
                }

                for (int i = 0; i < inArguments.Count; ++i)
                {
                    if (!inConverter.TryConvertTo(inArguments[i], m_Parameters[i + m_ContextOffset].ParameterType, inContext, out m_Arguments[i + m_ContextOffset]))
                    {
                        UnityEngine.Debug.LogErrorFormat("[MethodCache] Unable to convert string '{0}' to expected type {1}", inArguments[i], m_Parameters[i + m_ContextOffset].ParameterType.Name);
                        outReturnValue = null;
                        return(false);
                    }
                }

                return(DoInvoke(inTarget, inArguments.Count + m_ContextOffset, inContext, out outReturnValue));
            }