Example #1
0
        /// <summary>
        /// Determines whether the specified objects are equal.
        /// </summary>
        /// <param name="x">The first <see cref="MemberInfo"/> instance to compare.</param>
        /// <param name="y">The second <see cref="MemberInfo"/> instance to compare.</param>
        /// <returns>
        /// <see langword="true"/> if the specified objects are considered equal; otherwise,
        /// <see langword="false"/>.
        /// </returns>
        /// <remarks>
        /// <para>
        /// <paramref name="x"/> and <paramref name="y"/> are considered equal if x is exactly
        /// equal to y. If not, they are still considered equal if both instances'
        /// <see cref="MemberInfo.DeclaringType"/> and <see cref="MemberInfo.Name"/> properties are
        /// equal.
        /// </para>
        /// </remarks>
        public bool Equals(MemberInfo x, MemberInfo y)
        {
            if ((x == null) && (y == null))
            {
                return(true);
            }

            if (x == null)
            {
                return(false);
            }
            if (y == null)
            {
                return(false);
            }

            if (x.Equals(y))
            {
                return(true);
            }

            if (x.DeclaringType == null)
            {
                return(false);
            }
            if (y.DeclaringType == null)
            {
                return(false);
            }

            return(MemberInfoEqualityComparer.AreTypesRelated(x.DeclaringType, y.DeclaringType) &&
                   x.Name == y.Name);
        }
        /// <summary>
        /// Evaluates whether a request matches the property or field reserved by this command.
        /// </summary>
        /// <param name="request">The specimen request.</param>
        /// <returns>
        /// <see langword="true"/> if <paramref name="request"/> is is a <see cref="PropertyInfo"/>
        /// or <see cref="FieldInfo"/> that identifies the property or field reserved by this
        /// <see cref="BindingCommand{T, TProperty}"/>; otherwise, <see langword="false"/>.
        /// </returns>
        public bool IsSatisfiedBy(object request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            IEqualityComparer comparer = new MemberInfoEqualityComparer();

            return(comparer.Equals(this.member, request));
        }