Есть ли бывшая известная причина почему FormatException
не наследует ArgumentException
? Недействительный формат, казалось бы, был бы очень конкретным случаем аргумента, являющегося недействительным, подобным ArgumentOutOfRangeException
.
Статья MSDN для государств класса:
FormatException брошен, когда формат аргумента в просьбе метода не соответствует формату соответствующего формального типа параметра. Например, если метод определяет a
String
параметр, состоящий из двух цифр с вложенным периодом, передавая соответствующий аргумент последовательности, содержащий только две цифры к тому методу, заставил бы FormatException быть брошенным.
Походит просто на сценарий для ArgumentException
или получение класса мне.
Все это означает, то, что Вы не можете иметь дело с FormatException
под большим ArgumentException
семья исключения, и при этом Вы не можете определить, какой параметр заставил исключение быть брошенным.
Есть ли какая-либо причина этого на вид неуместного исключение, чтобы быть, где это?
Наилучшим решением является использование отдельной учетной записи 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
, действительно является и должно быть уточнено.
Это немного Snotty: но Рихтер в CLR через C # (стр. 432) предлагает, что может быть, это потому, что иерархия класса исключения не была реализована в .NET:
Оригинальная идея Microsoft была Это
System.Exception
будет базовым типом для всех исключений и что два других типа,System.systemexception
иSystem.ApplicationException
были бы только два типа происходит изисключения
. Кроме того, исключения, брошенные CLR, будут получены изSystemException
, и все прикрепленные к приложению исключения будут получены изApplicationException
. Таким образом, разработчики могли бы написать блок Catch, который ловит все выброшенные приложения исключения.Тем не менее, ... это правило не было очень хорошо; Некоторые исключения являются непосредственными, полученные из
исключения
(COLECTIONSTORAGEEXEEXECECTION
), некоторые исключительные исключения CLR являются производнымиApplicationException
... Так что это все большой беспорядок, и Результатом заключается в том, что SystemExceptionи
ApplicationException
типы вообще не имеют особого значения. На данный момент Microsoft хотела бы удалить их из иерархии классов исключения, но они не могут, потому что он сломал бы любой код, который уже ссылается на эти типы.
Это не именно ответа на ваш запрос, но я думаю, что это актуально, потому что я думаю, что это указывает на то, что нет никакой веской причины, почему некоторые производные исключения наследуют так, как они делают. К сожалению, наследство класса исключения не было все, что хорошо продумано, и это своего рода беспорядок.