System.ReflectionExtensions.GetBaseDefinition C# (CSharp) Method

GetBaseDefinition() public static method

When overridden in a derived class, returns the propertyInfo object for the method on the direct or indirect base class in which the property represented by this instance was first declared.
public static GetBaseDefinition ( this propertyInfo ) : PropertyInfo
propertyInfo this
return PropertyInfo
		public static PropertyInfo GetBaseDefinition(this PropertyInfo propertyInfo)
		{
			var method = propertyInfo.GetAccessors(true)[0];
			if (method == null)
				return null;

			var baseMethod = method.GetBaseDefinition();

			if (baseMethod == method && baseMethod.DeclaringType == baseMethod.ReflectedType)
				return propertyInfo;

			var allProperties = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;

			var arguments = propertyInfo.GetIndexParameters().Select(p => p.ParameterType).ToArray();

			return baseMethod.DeclaringType.GetProperty(propertyInfo.Name, allProperties, null, propertyInfo.PropertyType, arguments, null);
		}