enum 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,
}
出于好奇,值为17的TypeCode发生了什么?它曾经存在过吗?为什么有TypeCode。字符串18的值,而不是17?
下面的博客文章解释了这个洞:
这是一个好问题。我在调查这件事的历史看我能不能弄清楚发生了什么,但现在还不清楚。自2000年10月以来,我们在TypeCode枚举中就有了这个"漏洞"我找不到更老的比特了。但是,我确信那个评论不可逆转是对的,这曾经是TimeSpan。对于TimeSpan来说,它是可能有一段时间我们觉得会很有趣,然后我们坦率地说,没有多少人需要转换十进制到TimeSpan,然后删除它。
你可能会问,为什么在删除了whatever后不"修复"enum我们最初添加的这些值。事实证明,每当我们内部有重大变化,我们需要重新编译所有的代码这可能取决于被移除或改变的公众形象区域。对我们来说,这意味着重建一切可能存在的东西引用TypeCode。字符串,其值将从18变为17. 当我们在DevDiv内部完成这个过程时,它是昂贵的,对我们来说很痛苦。