Ejemplo n.º 1
0
        public override Boolean Equals(Object obj)
        {
            ComparableObject compareTo = obj as ComparableObject;

            if (ReferenceEquals(this, compareTo))
            {
                return(true);
            }

            return(compareTo != null && this.GetType().Equals(compareTo.GetTypeUnproxied()) &&
                   this.HasSameObjectSignatureAs(compareTo));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Se puede hacer un override de este método para proporcionar una rutina de comparación propia.
        /// </summary>
        protected virtual Boolean HasSameObjectSignatureAs(ComparableObject compareTo)
        {
            IEnumerable <PropertyInfo> signatureProperties = this.GetSignatureProperties();

            // Se comparan los valores de las propiedades que conforman la firma del objeto entre esta instancia y compareTo,
            // si alguno de los valores no coincide se devuelve false.
            if ((from property in signatureProperties
                 let valueOfThisObject = property.GetValue(this)
                                         let valueToCompareTo = property.GetValue(compareTo)
                                                                where valueOfThisObject != null || valueToCompareTo != null
                                                                where (valueOfThisObject == null ^ valueToCompareTo == null) || (!valueOfThisObject.Equals(valueToCompareTo))
                                                                select valueOfThisObject).Any())
            {
                return(false);
            }

            // Si se llegó a este punto y se encontraron propiedades que conforman la firma, entonces podemos
            // asumir que todo ha emparejado (es igual); en el caso contrario, si no se encontraron propiedades
            // que conformen la firma del objeto, simplemente se utiliza el comportamiento por defecto de Equals.
            return(signatureProperties.Any() || base.Equals(compareTo));
        }