Почему FormatException не наследует ArgumentException?

Есть ли бывшая известная причина почему FormatException не наследует ArgumentException? Недействительный формат, казалось бы, был бы очень конкретным случаем аргумента, являющегося недействительным, подобным ArgumentOutOfRangeException.

Статья MSDN для государств класса:

FormatException брошен, когда формат аргумента в просьбе метода не соответствует формату соответствующего формального типа параметра. Например, если метод определяет a String параметр, состоящий из двух цифр с вложенным периодом, передавая соответствующий аргумент последовательности, содержащий только две цифры к тому методу, заставил бы FormatException быть брошенным.

Походит просто на сценарий для ArgumentException или получение класса мне.

Все это означает, то, что Вы не можете иметь дело с FormatException под большим ArgumentException семья исключения, и при этом Вы не можете определить, какой параметр заставил исключение быть брошенным.

Есть ли какая-либо причина этого на вид неуместного исключение, чтобы быть, где это?

9
задан Mehrdad Afshari 25 January 2010 в 20:38
поделиться

2 ответа

Наилучшим решением является использование отдельной учетной записи Active Directory.

-121--4043469-

Я просто хотел ввести краткое примечание здесь.

Спецификация языка C # четко определяет «литерал» - литерал является представлением исходного кода значения . Литералы - это вещи типа true , 10 , 5,7 , 'c' , «hello» и null - они представляют собой текст , представляющий конкретное значение .

В спецификации языка C # слово «примитив» используется дважды; оно никогда не было определено и совершенно расплывчато относительно того, что оно может означать.

В спецификации языка C # нет необходимости использовать или определять слово «примитив» и поэтому не следует использовать этот расплывчатый термин. Я поговорил с Мадсом, и мы договорились, что будущие издания спецификации будут переработаны, чтобы полностью исключить это использование.

Как другие типы систем спецификации - библиотека отражения, CLI, VES и так далее - определяют слово «примитив», конечно, зависит от них.

Спасибо, что подняли вопрос.

Параметр -121--2805578-

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

Например, BinaryReader.Read7BitEncodedInt выдаст FormatException , если то, что будет прочитано из потока, не является допустимым 7-битовым закодированным целым числом. Это не требует никаких аргументов вообще. С другой стороны, значение ArgumentException должно вызываться только в том случае, если аргумент, переданный методу в качестве формального параметра, является недопустимым.

Описание, на которое вы ссылаетесь в статье MSDN, более ограничительное, чем FormatException , действительно является и должно быть уточнено.

14
ответ дан 4 December 2019 в 10:32
поделиться

Это немного Snotty: но Рихтер в CLR через C # (стр. 432) предлагает, что может быть, это потому, что иерархия класса исключения не была реализована в .NET:

Оригинальная идея Microsoft была Это System.Exception будет базовым типом для всех исключений и что два других типа, System.systemexception и System.ApplicationException были бы только два типа происходит из исключения . Кроме того, исключения, брошенные CLR, будут получены из SystemException , и все прикрепленные к приложению исключения будут получены из ApplicationException . Таким образом, разработчики могли бы написать блок Catch, который ловит все выброшенные приложения исключения.

Тем не менее, ... это правило не было очень хорошо; Некоторые исключения являются непосредственными, полученные из исключения ( COLECTIONSTORAGEEXEEXECECTION ), некоторые исключительные исключения CLR являются производными ApplicationException ... Так что это все большой беспорядок, и Результатом заключается в том, что SystemException и ApplicationException типы вообще не имеют особого значения. На данный момент Microsoft хотела бы удалить их из иерархии классов исключения, но они не могут, потому что он сломал бы любой код, который уже ссылается на эти типы.

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

6
ответ дан 4 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

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