Как я знал бы, не обработал ли я некоторые исключения непроверенные, которые мог выдать мой код.NET?

В.NET сигнатуры методов не говорят мне, если я избежал обрабатывать некоторые исключения, которые могли бы быть выданы моим кодом. Есть ли некоторый инструмент, который может предупредить меня, если говорят, что я использую HashTable, удаляют, но не обработали ArgumentNullException? Я не хочу быть удивленным во время выполнения.

И это означает, что необходимо знать код очень хорошо, иначе неконтролируемые исключения могут быть более трудны работать с?

7
задан Josh Lee 8 October 2010 в 17:41
поделиться

4 ответа

Ключ заключается в использовании блокировки объекта в списке массивов только тогда, когда это действительно необходимо.

Хорошей идеей было бы объединение списка массивов подклассов и обеспечение синхронизации в одиночных процессах чтения + записи + удаления.

Это обеспечит тонкую детализацию с блокировкой, позволяя потокам проходить через массив перечислять одновременно защищая семантику списка массивов.

-121--4435166-

Нет языковой поддержки для того, что вы пытаетесь сделать. Мы написали таможенное дополнение к VS, чтобы убедиться, что все точки входа для нашего API пробовали ловли для вырубки. Однако я никогда не видел значения в языках, которые заставили вас охватить все возможные объявленные случаи исключения, так как вы все еще должны написать какой-то код, чтобы сделать что-то значимое с ошибкой. Большинство людей просто смотрят на то, что жалобщик жалуется на написание обработчика и скрывают, что может быть полезной ошибкой в каком-то бесполезном коде. В некоторых случаях лучше потерпеть неудачу и знать, что есть проблема.

-121--3977987-

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

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

4
ответ дан 7 December 2019 в 05:22
поделиться

) Для приложений Windows:

AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;
// Handler for unhandled exceptions.
currentDomain.UnhandledException += UnhandledExceptionHandler;
// Handler for exceptions in threads behind forms.
Application.ThreadException += ThreadExceptionHandler;

public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
}

public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e)
{
}
2
ответ дан 7 December 2019 в 05:22
поделиться

F #: 224 225, 226, 248, 252, 270, 276, 299, 306 Символы

let x,(/)=System.Console.ReadLine(),String.replicate
let t,p=(int x.[0]-60)%7*5,int x.[1]%2
let g s i=printf"%s"(i/((99/s).[t+4*p..t+int x.[2..]*5+5*p]+"\n"))
g"|   ###  ###   |   ###  ###  ###   "5 
g"|    "3
g"|____"1

Я использовал модули 2 для обнаружения пробела или фунта. '' - 32% 2 = 0 "#" - 35% 2 = 1 " и поскольку мои условные возвращенные нули для false, я просто умножил результат модулей.

Используйте оператор < |, чтобы сбрить один символ пробела. Используется перегрузка оператора для сохранения другого символа.

исходный

let piano_long (input:string) = 
    let sharp, flat = if input.[1] = '#' then 4, 1 else 0, 0

    let note = (int input.[0] - 60) % 7
    let num = int (input.Substring 2)

    let start = note * 5 + sharp
    let stop = num * 5 + 1 + flat

    let top    = "|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |"
    let middle = "|    |    |    |    |    |    |    |    |    |    |    |    |    |    |"
    let bottom = "|____|____|____|____|____|____|____|____|____|____|____|____|____|____|"


    let mutable piano = ""

    for i in 1..5 do 
        piano <- piano + top.Substring(start, stop) + "\n"

    for i in 1..3 do 
        piano <- piano + middle.Substring(start, stop) + "\n"

    piano <- piano + bottom.Substring(start, stop)

    printf "%s\n\n" piano
-121--778778-

Ключ заключается в том, чтобы использовать блокировку объекта в списке массивов только тогда, когда это действительно необходимо.

Хорошей идеей было бы объединение списка массивов подклассов и обеспечение синхронизации в одиночных процессах чтения + записи + удаления.

Это обеспечит тонкую детализацию с блокировкой, позволяя потокам проходить через массив перечислять одновременно защищая семантику списка массивов.

-121--4435166-

Нет языковой поддержки для того, что вы пытаетесь сделать. Мы написали таможенное дополнение к VS, чтобы убедиться, что все точки входа для нашего API пробовали ловли для вырубки. Однако я никогда не видел значения в языках, которые заставили вас охватить все возможные объявленные случаи исключения, так как вы все еще должны написать какой-то код, чтобы сделать что-то значимое с ошибкой. Большинство людей просто смотрят на то, что жалобщик жалуется на написание обработчика и скрывают, что может быть полезной ошибкой в каком-то бесполезном коде. В некоторых случаях лучше потерпеть неудачу и знать, что есть проблема.

1
ответ дан 7 December 2019 в 05:22
поделиться

Вы должны добавить обработчик исключений верхнего уровня для своего приложения и написать модульный, функциональный и интеграционный тесты для вашего приложения, которые будут проверять все возможные варианты использования. Это поможет вам устранить почти все непроверенные исключения.

Также старайтесь не ловить исключения, а устранять причину. (т.е. не перехватить ArgumentNullException , но не передать null

1
ответ дан 7 December 2019 в 05:22
поделиться
Другие вопросы по тегам:

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