System.Dynamic ошибка?

Пока я играл с динамикой C # 4.0, я обнаружил странные вещи, происходящие с кодом:

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);
    }
}

Хорошо, это работает, но ... взгляните на окно IntelliTrace:

скриншот http://img717.imageshack.us/img717/4914/10435230.png

Таким образом, каждый вызов (и другие операции с динамическим объектом) приводит к двойному выбрасыванию и отлову странных исключений!

Я понимаю, что иногда для оптимизации может использоваться механизм исключений, например, первый вызов динамического параметра может быть выполнен для некоторого делегата-заглушки, который просто вызывает исключение - это может быть как сигнал к динамическому связующему, чтобы разрешить правильный член и повторно указать делегировать. Следующий звонок тому же делегату будет выполнен без каких-либо проверок.

Но ... поведение кода выше выглядит очень странно. Может быть, выбрасывать и перехватывать исключения дважды за любую операцию над DynamicObject - это ошибка?

Ответы на вопрос(2)

Ваш ответ на вопрос