コード例 #1
0
ファイル: BlockMetaCache.cs プロジェクト: BeauPrime/BeauUtil
            private bool InvokeMethod(object inThis, StringSlice inData, SplitResources inSplitResources)
            {
                if (m_Parameters.Length > 0)
                {
                    lock (inSplitResources.LockObj)
                    {
                        inSplitResources.ArgList.Clear();

                        if (m_RequiredParamCount == 1 && m_Parameters.Length == 1)
                        {
                            if (!StringParser.TryConvertTo(inData, m_Parameters[0].ParameterType, out m_MethodParams[0]))
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            int providedArgCount = inData.Split(inSplitResources.Splitter, StringSplitOptions.None, inSplitResources.ArgList);
                            if (providedArgCount < m_RequiredParamCount || providedArgCount > m_Parameters.Length)
                            {
                                return(false);
                            }

                            for (int i = 0; i < providedArgCount; ++i)
                            {
                                if (!StringParser.TryConvertTo(inSplitResources.ArgList[i], m_Parameters[i].ParameterType, out m_MethodParams[i]))
                                {
                                    return(false);
                                }
                            }

                            for (int i = providedArgCount; i < m_Parameters.Length; ++i)
                            {
                                m_MethodParams[i] = m_DefaultParams[i];
                            }
                        }
                    }
                }

                try
                {
                    m_Method.Invoke(inThis, m_MethodParams);
                    return(true);
                }
                catch (Exception e)
                {
                    Debug.LogException(e);
                    return(false);
                }
            }
コード例 #2
0
ファイル: BlockMetaCache.cs プロジェクト: BeauPrime/BeauUtil
            internal bool Invoke(object inThis, StringSlice inData, SplitResources inSplitResources)
            {
                if ((m_Flags & InvocationFlags.Static) != 0)
                {
                    inThis = null;
                }

                if ((m_Flags & InvocationFlags.Field) != 0)
                {
                    return(InvokeField(inThis, inData));
                }
                if ((m_Flags & InvocationFlags.Method) != 0)
                {
                    return(InvokeMethod(inThis, inData, inSplitResources));
                }
                if ((m_Flags & InvocationFlags.Property) != 0)
                {
                    return(InvokeProperty(inThis, inData));
                }

                return(false);
            }