2011-07-28 14 views
25

Tôi muốn có tham số ngày tùy chọn cho một phương thức (mặc định là MinValue), để kiểm tra xem người dùng đã thực sự cung cấp giá trị hay chưa (cung cấp MinValue không hợp lệ), nhưng tôi không được phép hiển thị một hằng số biên dịch.C# - Tại sao DateTime.MinValue và MaxValue không phải là hằng số biên dịch?

Theo the MSDN page, "Giá trị của hằng số này tương đương với 00: 00: 00.0000000, ngày 1 tháng 1, 0001."

Vậy tại sao không phải là hằng số biên dịch? Và tại sao nó khác với việc truyền vào Int32.MinValue, cái nào được cho phép?

+0

@Downvoter Tại sao lại là downvote? Tôi cảm thấy câu hỏi rõ ràng, có câu trả lời chính xác và có liên quan đến trang web. – Alex

Trả lời

23

Bạn không thể xác định hằng số DateTime (hoặc cấu trúc). Từ các loại được phép MSDN cho const là:

Một trong các loại: byte, char, ngắn, int, dài, phao, kép, thập phân, bool, chuỗi, kiểu enum hoặc loại tham chiếu.

+1

cảm ơn, điều này trả lời câu hỏi thực tế của tôi! – Alex

+1

@jazmatician DateTime _is_ một loại giá trị. Xem http://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx – Vasea

+0

Tôi biết rằng đã sai khi tôi nhập, nhưng không thể đặt ngón tay lên đó. :) –

12

Cách giải quyết: Sử dụng tham số có thể làm rỗng. IMO này là sạch hơn anyways kể từ khi giá trị đặc biệt là rõ ràng khác nhau và không chỉ là một giá trị bình thường.

void A(DateTime? p=null) 
{ 
} 

lựa chọn khác là:

void A(DateTime p=default(DateTime)) 
{ 
} 

nào cho thấy một tham số mặc định có thể sử dụng default(T) giá trị tham số mặc định là hợp lệ cho người sử dụng định nghĩa các loại.

Hoặc chỉ cần quá tải phương thức cho số lượng thông số khác nhau.

+0

này trả lời câu hỏi ngụ ý của tôi về 'làm thế nào tôi có thể làm những gì tôi đang cố gắng để làm gì?', Cảm ơn :) – Alex

+0

Bạn có thể thử sử dụng ['readonly'] (http://msdn.microsoft.com/en- chúng tôi/thư viện/acdd6hb7 (v = vs.71) .aspx) nếu bạn đang tìm kiếm để đảm bảo rằng giá trị không thay đổi. Và tôi tin rằng điều này có thể được sử dụng kết hợp với kiểu nullable ['?'] (Http://msdn.microsoft.com/en-us/library/1t3y8s4s (v = vs.80) .aspx). – eternalmatt

+0

@eternalmatt Tôi không làm theo - làm thế nào điều này giúp có tham số DateTime tùy chọn? Nếu nó là tùy chọn, nó sẽ cần một giá trị mặc định, và vì tôi không thể cung cấp một hằng số biên dịch, có vẻ như giải pháp CodeInChaos là tốt nhất. – Alex