Система. Динамическая ошибка?

В то время как я играющий с динамичным 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 - являются ошибкой?

9
задан controlflow 11 March 2010 в 22:00
поделиться

2 ответа

Спасибо, я обнаружил ошибку, мы ее ищем. Я обновлю это, как только получу от команды компилятора. Он добавляет связыватель времени выполнения C # (Microsoft.CSharp.dll).

Если вы включите исключения первого шанса в Debug.Exceptions, вы попадете в это. IntelliTrace не имеет ничего общего с ошибкой, он просто показывает вам, какое исключение при первой возможности было выброшено и проглочено.

3
ответ дан 3 November 2019 в 07:13
поделиться

Я думаю, что исключения вызваны тем, что отладчик пытается что-то проверить.

Если вы говорите Visual Studio останавливаться при возникновении исключения, оно не останавливается, и это указывает на то, что за исключения отвечает отладчик, а не сам код.

2
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: