¿Hay una mejor manera de implementar Equals para objetos con muchos campos?

ver también¿Cómo comprobar rápidamente si la transferencia de datos de dos objetos tiene propiedades iguales en C #?

Tengo muchos objetos de transferencia de datos (DTO) que contiene cada unomuchos campos simples. Necesito implementar Equals en todos ellos (para poder escribir algunas pruebas unitarias en el transporte de ellos var WCF).

El código que estoy usando es:

public override bool Equals(object rhs)
{

    RequestArguments other = rhs as RequestArguments;

    return
       other != null && 
       other.m_RequestId.Equals(RequestId) && 
       other.m_Type.Equals(m_Type) && 
       other.m_Parameters.Equals(m_Parameters) && 
       other.m_user.Equals(m_user);
}

¡Tiene que haber una mejor manera!... (listar todos los campos es más bien pedir errores y problemas de mantenimiento)

P.ej. tenemos objeto. MemberwiseClone () para ayudar con el caso Cloning (), pero no puedo encontrar nada para ayudar con Equals. Estamos funcionando con plena confianza, por lo que una solución basada en la reflexión es una respuesta, pero prefiero no reinventar la rueda.

(Lo siento, no generamos el DTO desde un lenguaje específico del dominio, de lo contrario, ¡este tipo de cosas sería fácil! Además, no puedo cambiar el sistema de compilación para agregar otro paso)

Respuestas a la pregunta(4)

Su respuesta a la pregunta