12 июн. 2012 г., 08:20 отakjoshiAlexander Bartosh

Почему исключение .net не ловится?

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

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

Это никогда не должно завершаться с исключением. Но почему это терпит неудачу, когда я запускаю это? Почему SafeMethodWillNeverThrow () выбрасывает исключение?

Перед тестированием этого кода прочитайте ответ ниже.

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

09 мая 2016 г., 18:08 отAlexander Bartosh

овий исполнения контрактов кода, вы используете конфигурацию выпуска. И если вы, ваш метод 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 обнаружил недопустимую программу.

ВАШ ОТВЕТ НА ВОПРОС