Beispiel #1
0
        public sealed override ParameterInfo[] GetIndexParameters()
        {
            ParameterInfo[] indexParameters = _lazyIndexParameters;
            if (indexParameters == null)
            {
                bool useGetter = CanRead;
                RuntimeMethodInfo      accessor = (useGetter ? Getter : Setter);
                RuntimeParameterInfo[] runtimeMethodParameterInfos = accessor.RuntimeParameters;
                int count = runtimeMethodParameterInfos.Length;
                if (!useGetter)
                {
                    count--;  // If we're taking the parameters off the setter, subtract one for the "value" parameter.
                }
                if (count == 0)
                {
                    _lazyIndexParameters = indexParameters = Array.Empty <ParameterInfo>();
                }
                else
                {
                    indexParameters = new ParameterInfo[count];
                    for (int i = 0; i < count; i++)
                    {
                        indexParameters[i] = RuntimePropertyIndexParameterInfo.GetRuntimePropertyIndexParameterInfo(this, runtimeMethodParameterInfos[i]);
                    }
                    _lazyIndexParameters = indexParameters;
                }
            }

            int numParameters = indexParameters.Length;

            if (numParameters == 0)
            {
                return(indexParameters);
            }
            ParameterInfo[] result = new ParameterInfo[numParameters];
            for (int i = 0; i < numParameters; i++)
            {
                result[i] = indexParameters[i];
            }
            return(result);
        }
Beispiel #2
0
        public sealed override ParameterInfo[] GetIndexParameters()
        {
            bool useGetter             = CanRead;
            RuntimeMethodInfo accessor = (useGetter ? Getter : Setter);

            RuntimeParameterInfo[] runtimeMethodParameterInfos = accessor.GetRuntimeParametersAndReturn(accessor);
            int count = runtimeMethodParameterInfos.Length - 1;  // Subtract one for the return parameter.

            if (!useGetter)
            {
                count--;  // If we're taking the parameters off the setter, subtract one for the "value" parameter.
            }
            if (count == 0)
            {
                return(Array.Empty <ParameterInfo>());
            }
            ParameterInfo[] result = new ParameterInfo[count];
            for (int i = 0; i < count; i++)
            {
                result[i] = RuntimePropertyIndexParameterInfo.GetRuntimePropertyIndexParameterInfo(this, runtimeMethodParameterInfos[i + 1]);
            }
            return(result);
        }