C #: Вы вызываете или генерируете исключение?

Я знаю, что это, вероятно, не имеет большого значения, но я хотел бы знать, что правильно.

Если фрагмент кода содержит некоторую версию throw new SomeKindOfException(). Мы говорим, что этот фрагмент кода потенциально может вызвать исключение? Или выбросить исключение?

Ключевое слово throw, так что я склоняюсь к этому, но для создания исключения также часто используется ...

Имеют ли они какое-то другое значение? Есть ли какое-то различие между одним из них? Или это всего лишь два слова, означающие одно и то же?


person Svish    schedule 12.06.2009    source источник
comment
Для связанного обсуждения в Ruby: stackoverflow.com/questions/51021   -  person Marc Gravell    schedule 12.06.2009


Ответы (5)


В терминологии C # повышение используется в контексте событий, а выброс - в контексте исключений.

Лично я считаю throw/catch комбинацию красивее, чем raise/catch.

person mmx    schedule 12.06.2009
comment
Ах, конечно, полностью согласен. Теперь это имеет смысл! Спасибо, что прояснили это :) - person Svish; 12.06.2009
comment
В C # также используется функция lift для обозначения предоставления версии оператора, допускающей значение NULL, для типов, не допускающих значения NULL, и подъема для обозначения превращения локальной переменной в поле класса закрытия. Итак, в C # вы можете поднимать, поднимать или поднимать предметы, и все они означают разные вещи. - person Eric Lippert; 12.06.2009

Я не могу говорить о C #, но в C ++ было выбрано «throw», потому что «raise» уже было принято как стандартное имя функции.

person Community    schedule 12.06.2009

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

person Tamas Czinege    schedule 12.06.2009
comment
Вы правы в написании английского языка, но в техническом письме лучше постоянно использовать одно и то же слово, иначе читатель может подумать, что есть некоторая разница. - person stivlo; 16.05.2011

Терминология различных языков отдает предпочтение слову «бросить». И я согласен с тем, что «throw» имеет гораздо больше смысла, учитывая, что это ключевое слово, а документация по компилятору / языку всегда ссылается на «выбрасываемое» исключение.

Однако в чреве чудовища исключения на самом деле подняты, а не брошен. Если вы достаточно глубоко погрузились в отладчик, глядя на EXCEPTION_RECORD тогда вы говорите в терминологии SEH, в которой конкретный класс исключений компилятора / языка (eh, clr, vcpp ) - лишь один из множества исключений. Я предполагаю, что исходные условия, для которых возникли исключения, такие как ошибки страниц и переполнение стека, были условиями, «замеченными» ядром, которое «информирует» пользовательский режим об условии, а не исключением, которое пользовательский код «бросал» на себя. , поэтому этот термин имеет больше смысла в этом контексте.

person Remus Rusanu    schedule 12.06.2009

Бросок или рейз кажутся мне хорошими, они значат для меня одно и то же. Я бы не стал писать это, но когда говорю, я обычно говорю: «Отбросьте исключение».

Для событий я бы использовал либо «запустить событие», либо «вызвать событие».

person Scott Langham    schedule 12.06.2009
comment
Огонь, конечно, обычное дело для событий. Придумывая руководящие принципы терминологии, команда решила, что огонь кажется излишне правдоподобным, поэтому они предложили отказаться от огня в пользу повышения. Мое личное мнение таково, что это немного глупо, но рейз - это нормально, и мы могли бы стандартизировать то или другое. - person Eric Lippert; 12.06.2009