System.Reflection.RuntimePropertyInfo.GetIndexParameters C# (CSharp) Method

GetIndexParameters() public method

public GetIndexParameters ( ) : System.Reflection.ParameterInfo[]
return System.Reflection.ParameterInfo[]
        public override ParameterInfo[] GetIndexParameters() 
        {
            // @History - Logic ported from RTM

            int numParams = 0;
            ParameterInfo[] methParams = null;

            // First try to get the Get method.
            MethodInfo m = GetGetMethod(true);
            if (m != null)
            {
                // There is a Get method so use it.
                methParams = m.GetParametersNoCopy();
                numParams = methParams.Length;
            }
            else
            {
                // If there is no Get method then use the Set method.
                m = GetSetMethod(true);

                if (m != null)
                {
                    methParams = m.GetParametersNoCopy();
                    numParams = methParams.Length - 1;
                }
            }

            // Now copy over the parameter info's and change their 
            // owning member info to the current property info.

            if (methParams != null && methParams.Length == 0)
                return methParams;
            
            ParameterInfo[] propParams = new ParameterInfo[numParams];
            
            for(int i = 0; i < numParams; i++)
                propParams[i] = new ParameterInfo(methParams[i], this);

            return propParams;
        }

Usage Example

Esempio n. 1
0
        private static PropertyInfo?GetBasePropertyDefinition(RuntimePropertyInfo property)
        {
            MethodInfo?method = property.GetGetMethod(true);

            if (method == null || !method.IsVirtual)
            {
                method = property.GetSetMethod(true);
            }
            if (method == null || !method.IsVirtual)
            {
                return(null);
            }

            MethodInfo baseMethod = ((RuntimeMethodInfo)method).GetBaseMethod();

            if (baseMethod != null && baseMethod != method)
            {
                ParameterInfo[] parameters = property.GetIndexParameters();
                if (parameters != null && parameters.Length > 0)
                {
                    Type[] paramTypes = new Type[parameters.Length];
                    for (int i = 0; i < paramTypes.Length; i++)
                    {
                        paramTypes[i] = parameters[i].ParameterType;
                    }
                    return(baseMethod.DeclaringType !.GetProperty(property.Name, property.PropertyType,
                                                                  paramTypes));
                }
                else
                {
                    return(baseMethod.DeclaringType !.GetProperty(property.Name, property.PropertyType));
                }
            }
            return(null);
        }