2011-09-07 32 views
11

Các enum System.TypeCode được định nghĩa như sau:gì đã xảy ra với System.TypeCode giá trị 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, 
} 

Ra khỏi tò mò, những gì đã xảy ra với TypeCode giá trị 17? Nó đã từng tồn tại chưa? Tại sao có TypeCode.String giá trị của 18 và không 17?

Trả lời

13

Các following blog post giải thích lỗ:

Đây là một câu hỏi hay. Tôi đã tìm hiểu về lịch sử của tệp này để xem liệu tôi có thể tìm hiểu điều gì đã xảy ra và không rõ ràng. Chúng tôi đã có "lỗ hổng" này trong enCode TypeCode kể từ tháng 10 năm 2000 và Tôi không thể tìm thấy một bộ bit cũ hơn. Nhưng, tôi chắc chắn rằng nhận xét trong IConvertible là đúng - đây từng là TimeSpan. Đối với TimeSpan, đó là có thể chúng tôi nghĩ rằng điều đó sẽ thú vị trong một thời gian, sau đó chúng tôi nhận ra rằng thẳng thắn rằng không nhiều người cần phải chuyển đổi số thập phân thành một TimeSpan, sau đó xóa nó.

Bạn có thể hỏi lý do tại sao chúng tôi không "khắc phục" sự kiện khi chúng tôi xóa bất kỳ giá trị nào mà chúng tôi đã thêm ban đầu. Nó chỉ ra rằng bất cứ khi nào chúng tôi có thay đổi đột phá trong nội bộ, chúng tôi cần biên dịch lại tất cả mã có thể phụ thuộc vào diện tích công khai đã bị xóa hoặc thay đổi khu vực. Đối với chúng tôi, điều đó có nghĩa là xây dựng lại mọi thứ có thể có được gọi là TypeCode.String, giá trị của nó sẽ thay đổi từ 18 đến 17. Trong khi chúng tôi thực hiện quá trình đó trong DevDiv, đó là tốn kém & gây đau đớn cho chúng tôi.

Các vấn đề liên quan