Вопрос по exception, .net – Почему исключение .net не ловится?

10

Рассмотрите следующее «Безопасно» программа:

internal class Safe
{
    public static void SafeMethodWillNeverThrow()
    {
        try
        {
            var something = ThrowsNewException();
            Func<int, string> x = p => something.ToString();
        }
        catch (Exception)
        {
        }
    }

    private static object ThrowsNewException() 
    {
        throw new Exception();
    }

    public static void Main()
    {
        SafeMethodWillNeverThrow();
    }
}

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Воспроизводится с 1.4.50327.0. Странно: -O sergtk
Убедитесь, что для вашего проекта включена проверка контрактных контрактов в рамках контрактов кода, и вы создали конфигурацию выпуска. Если вы все еще не можете воспроизвести его, пожалуйста, дайте мне знать версию контрактов кода, которые вы используете. Спасибо Alexander Bartosh
Я запустил приведенный выше код и не смог воспроизвести проблему - она работает, как и ожидалось, исключение ловится sergtk

Ваш Ответ

1   ответ
25

овий исполнения контрактов кода, вы используете конфигурацию выпуска. И если вы, ваш метод SafeMethodWillNeverThrow () преобразуется в следующее с помощью переписывателя Code Contracts:

public static void SafeMethodWillNeverThrow()
{
    object something = ThrowsNewException();
    try
    {
        Func<int, string> func1 = p => something.ToString();
    }
    catch (Exception)
    {
    }
}

Ой!

Вывод: не верь тому, что видишь - читай ИЛ :).

Эта проблема воспроизводима следующими версиями Code Contracts:

1.4.50327.0

1.4.50126.1

I am using Code Contracts and would like to have the error fixed ASAP. I have posted it to Code Contracts forum. The only way to have it fixed soon is to attract enough attention to it. So please vote up, especially on the Code Contracts forum

Обновление май 2016:

Версия 1.9.10714.2 дает другое исключение Необработанное исключение: System.InvalidProgramException: Common Language Runtime обнаружил недопустимую программу.

& APOS; Хороший & APOS; переписать!shudder

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