Что случилось с System.TypeCode со значением 17 - PullRequest
12 голосов
/ 07 сентября 2011

Перечисление 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?

1 Ответ

13 голосов
/ 07 сентября 2011

следующий пост в блоге объясняет дыру :

Это хороший вопрос.Я копался в истории этого файла, чтобы посмотреть, смогу ли я выяснить, что произошло, и это не ясно.У нас была эта «дыра» в перечислении TypeCode с октября 2000 года, и я не могу найти более старый набор битов.Но я уверен, что комментарии в IConvertible верны - раньше это был TimeSpan.Что касается TimeSpan, возможно, мы подумали, что это будет интересно какое-то время, а затем мы поняли, что, честно говоря, не так много людей должны преобразовывать десятичное число в TimeSpan, а затем удалили его.t «исправить» перечисление, когда мы удалили любое из этих значений, которое мы первоначально добавили.Получается, что всякий раз, когда у нас происходит внутреннее изменение, нам нужно перекомпилировать весь код, который может зависеть от удаленной или измененной области общего доступа.Для нас это будет означать перестройку всего, что могло бы ссылаться на TypeCode.String, значение которого изменилось бы с 18 до 17. Хотя мы и выполняем этот процесс внутри DevDiv, для нас это дорого и больно.1011 *

...