Consideremos el siguiente código de ejemplo:La creación de dos instancias delegar en el mismo método anónimo no son iguales
static void Main(string[] args)
{
bool same = CreateDelegate(1) == CreateDelegate(1);
}
private static Action CreateDelegate(int x)
{
return delegate { int z = x; };
}
Se podría imaginar que las dos instancias de delegado compararía a ser igual, tal como lo harían cuando se utiliza el buen método de método antiguo (nueva Acción (MiMétodo)). No se comparan para ser iguales porque .NET Framework proporciona una instancia de cierre oculta por instancia de delegado. Como esas dos instancias de delegado tienen sus propiedades de Destino configuradas en su instancia individual oculta, no se comparan. Una posible solución es para el IL generado para un método anónimo para almacenar la instancia actual (este puntero) en el destino del delegado. Esto permitirá que los delegados se puedan comparar correctamente, y también ayuda desde el punto de vista del depurador, ya que verá que su clase es el objetivo, en lugar de una clase oculta.
Puedes leer más sobre este tema en el error que envié a Microsoft. El informe de fallas también brinda un ejemplo de por qué estamos usando esta funcionalidad y por qué creemos que debería cambiarse. Si crees que esto también es un problema, ayúdanos a apoyarlo proporcionando calificación y validación.
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=489518
hay algún razones posibles por la funcionalidad no debe ser cambiado? ¿Siente que este fue el mejor curso de acción para resolver el problema, o recomienda que tome una ruta diferente?
En qué especificación de qué Microsoft mencionar que estos dos deben ser iguales? Con el mismo razonamiento, puedo argumentar que 'new MyClass() == new MyClass()' debería ser 'true' si' MyClass' es una clase vacía, por ejemplo. Eres demasiado rápido para nombrar un comportamiento que no se menciona en ninguna especificación como "error". –
¿En qué especificación mencionaron que no deberían ser iguales? –