¿Error dinámico del sistema?
Mientras jugaba con la dinámica C # 4.0, encontré cosas extrañas que suceden con el código como este:
using System.Dynamic;
sealed class Foo : DynamicObject
{
public override bool TryInvoke(
InvokeBinder binder, object[] args, out object result)
{
result = new object();
return true;
}
static void Main()
{
dynamic foo = new Foo();
var t1 = foo(0);
var t2 = foo(0);
var t3 = foo(0);
var t4 = foo(0);
var t5 = foo(0);
}
}
Ok, funciona pero ... mira la ventana de IntelliTrace:
captura de pantalla http://img717.imageshack.us/img717/4914/10435230.png
Por lo tanto, cada invocación (y otras operaciones también en objetos dinámicos) provoca dos veces extrañas excepciones.
Entiendo que a veces se puede usar un mecanismo de excepciones para las optimizaciones, por ejemplo, la primera llamada a la dinámica se puede realizar a algún delegado de código auxiliar, que simplemente arroja una excepción: esto puede ser como una señal para la carpeta dinámica para resolver un miembro correcto y volver a apuntar delegar. La próxima llamada al mismo delegado se realizará sin ninguna verificación.
Pero ... el comportamiento del código anterior se ve muy extraño. Quizás lanzar y capturar excepciones dos veces por cada operación en DynamicObject, ¿es un error?