2011-09-07 78 views
11

System.TypeCode System.TypeCode定义如下的枚举:发生了什么事的价值17

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.String的值是18而不是17?

回答

13

following blog post解释

这是一个很好的问题。我正在深入研究这个 文件的历史,看看我能否弄清楚发生了什么,但目前还不清楚。 自2000年10月以来,我们在TypeCode枚举中出现了这个“洞”,而 我找不到一组较旧的位。但是,我确信在 IConvertible的评论是正确的 - 这曾经是TimeSpan。对于TimeSpan而言,它是 可能我们认为这会很有趣,然后我们 意识到,坦率地说,并不是很多人需要将Decimal 转换为TimeSpan,然后将其删除。

您可能会问,为什么我们没有“修复”枚举,当我们删除了我们最初添加的这些值中的任何一个。事实证明,只要我们 在内部发生重大更改,我们需要重新编译所有代码 ,这些代码可能取决于已删除或更改的公共表面 区域。对我们来说,这意味着重建所有可能带有 的TypeCode.String,它的值将从18更改为 17.虽然我们在DevDiv内部经历了该过程,但对我们来说,这是 昂贵的&。