Подтвердить что ты не робот

Что случилось с System.TypeCode значения 17

Перечисление System.TypeCode определяется следующим образом:

public enum TypeCode
{
   Empty = 0,
   Object = 1,
   DBNull = 2,
   Boolean = 3,
   Char = 4,
   SByte = 5,
   Byte = 6,
   Int16 = 7,
   UInt16 = 8,
   Int32 = 9,
   UInt32 = 10,
   Int64 = 11,
   UInt64 = 12,
   Single = 13,
   Double = 14,
   Decimal = 15,
   DateTime = 16,
   String = 18,
}

Из любопытства, что случилось с TypeCode значения 17? Он когда-либо существовал? Почему TypeCode.String имеет значение 18, а не 17?

4b9b3361

Ответ 1

после сообщения в блоге объясняет это отверстие:

Это хороший вопрос. Я рылся в истории этого файл, чтобы узнать, могу ли я выяснить, что произошло, и его неясно. У Weve была эта "дыра" в перечислении TypeCode с октября 2000 года, и Я не могу найти более старый набор бит. Но, я уверен, что комментарий в IConvertible прав - это был TimeSpan. Для TimeSpan его возможно, мы подумали, что это будет интересно на некоторое время, тогда мы понял, что, откровенно говоря, не так много людей должны преобразовать десятичную на TimeSpan, затем удалите его.

Вы можете спросить, почему мы не "исправили" перечисление, когда мы удалили какое бы то ни было из этих значений, которые мы первоначально добавили. Оказывается, всякий раз, когда мы имеют внутреннее нарушение, нам необходимо перекомпилировать весь код которые могут зависеть от удаленной или измененной общественной поверхности площадь. Для нас это означало бы восстановление всего, что могло бы иметь ссылка на TypeCode.String, значение которой изменилось бы с 18 на 17. Хотя мы и проходим этот процесс внутри DevDiv, это дорогостоящим и болезненным для нас.