2010-04-22 64 views
19

Tôi đã thực hiện một số thói quen chuyển đổi loại tối qua cho một hệ thống tôi đang làm việc. Một trong các chuyển đổi liên quan đến việc chuyển các giá trị chuỗi thành các tương đương DateTime của chúng.Điểm Convert.ToDateTime (bool) là gì?

Trong khi thực hiện việc này, tôi nhận thấy rằng phương thức Convert.ToDateTime() có quá tải chấp nhận tham số boolean.

Câu hỏi đầu tiên? Trong hoàn cảnh nào, điều này có thể hữu ích không?

Tôi đã tiến xa hơn một chút và cố thực hiện phương pháp trong QuickWatch. Dù bằng cách nào (đúng hay sai), thường trình trả về một InvalidCastException.

Câu hỏi thứ hai? Tại sao phương pháp này lại ở đây?

EDIT

Cảm ơn câu trả lời, chàng trai. Tôi có thể thấy nó như thế nào làm cho tinh thần từ một quan điểm hợp đồng quan điểm, nhưng nó không có vẻ kỳ lạ mà khuôn khổ cốt lõi bao gồm các phương pháp: -

  • có thể không bao giờ làm việc
  • Tệ hơn nữa, thực sự sẽ ném một ngoại lệ khi ai đó cố gắng gọi nó.

Giống như ai đó đang chế tạo một chiếc xe được điều khiển chủ động dừng xe của bạn khi làm việc.

+3

không chỉ "ngừng hoạt động", thực sự làm cho nó sụp đổ :-) –

+1

Eric Lippert sẽ không quá tự hào về công việc này từ nhóm BCL. Theo ông, mọi tính năng không được thực hiện theo mặc định và chỉ được thực hiện nếu cần phát sinh theo chi phí/nhu cầu. Rõ ràng một người quá giàu BCL :) Thực tế không sử dụng cho khách hàng .. – nawfal

Trả lời

6

Điều này có ý nghĩa vì ToDateTime là một phần của giao diện IConvertible được triển khai bởi bool. Nếu bạn nhìn vào phản xạ, bạn sẽ thấy rằng nó ném một InvalidCastException.

Cập nhật (từ Convert):

public static DateTime ToDateTime(bool value) 
{ 
    return ((IConvertible) value).ToDateTime(null); 
} 
+3

Nhưng: đây là một phương pháp tĩnh mà không thể là một phần của một giao diện.Vì vậy, điều này không hợp lý chút nào. –

+0

@Stefan Steinegger xem cập nhật của tôi. –

+3

Tuy nhiên: không có sử dụng để thực hiện một phương pháp tĩnh mà không nên được gọi. Phương thức tĩnh được liên kết tĩnh bởi trình biên dịch, không có gì động ở đây và không có sử dụng cho phương thức này. –

3

Nếu bạn nhìn kỹ, most của quá tải là không hợp lệ và sẽ ném một InvalidCastException.

Nó phải triển khai tất cả của các phôi khi nó triển khai IConvertible và đây là cách duy nhất để làm điều đó một cách chính xác.

+3

Đây là những phương pháp tĩnh, chúng không thực hiện bất kỳ giao diện nào. Vì vậy, câu hỏi vẫn còn: tại sao những phương pháp này có? –

4

Tôi nghĩ rằng nó ở đó cho đầy đủ và bạn nhận được một InvalidCastException rõ ràng khi gọi Convert.ToDateTime với một đối tượng là một bool.

Nếu bạn nhìn vào tất cả các thành viên của Chuyển đổi, bạn có thể thấy rằng quá tải đã được bao gồm để chấp nhận tất cả các loại cơ bản cho chuyển đổi cho từng loại cơ bản khác, với InvalidCastExceptions được ném khi không có chuyển đổi hợp lý.

Tôi đoán họ nghĩ rằng điều này sẽ có ý nghĩa hơn là không hề có quá tải.

+3

Tôi nghĩ, đây là giải thích duy nhất cho việc này. Các * nghĩ "nó sẽ là tốt hơn để làm cho nó hoàn thành. Nhưng thực sự, không có sử dụng nó. –