2011-09-07 18 views
11

wyliczenia System.TypeCode jest zdefiniowany następująco:Co się stało z System.TypeCode wartości 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, 
} 

z ciekawości, co się stało Kod typu wartości 17? Czy kiedykolwiek istniało? Dlaczego TypeCode.String ma wartość 18, a nie 17?

Odpowiedz

13

following blog post wyjaśnia dziura:

To jest dobre pytanie. Przeszukałem historię tego pliku , aby sprawdzić, czy mogę dowiedzieć się, co się stało, i nie jest to jasne. Mieliśmy tę "dziurę" w wyliczaniu kodu TypeCode od października 2000 r. I Nie mogę znaleźć starszego zestawu bitów. Ale, jestem pewien, ten komentarz w IConvertible ma rację - kiedyś był TimeSpan. Jeśli chodzi o TimeSpan, jest możliwe, że pomyśleliśmy, że będzie to interesujące przez jakiś czas, a następnie zdaliśmy sobie sprawę, że tak naprawdę niewielu ludzi musi przekonwertować dziesiętny na TimeSpan, a następnie go usunąć.

Możesz zapytać, dlaczego nie "naprawiliśmy" wyliczenia, gdy usunęliśmy z tych wartości, które pierwotnie dodaliśmy, wartości . Okazuje się, że za każdym razem, gdy mamy wewnętrzną zmianę zerwania, musimy przekompilować cały kod , który może być zależny od usuniętego lub zmienionego obszaru publicznej powierzchni . Dla nas oznaczałoby to przebudowanie wszystkiego, co może mieć , o którym mowa w TypeCode.String, którego wartość zmieniłaby się z 18 na 17. Podczas gdy my przechodzimy przez ten proces wewnętrznie w DevDiv, jest to dla nas bolesne kosztowne &.

Powiązane problemy