2011-09-07 82 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內部經歷了該過程,但對我們來說,這是 昂貴的&。