开发者

C# - Why are DateTime.MinValue and MaxValue not compile-time constants?

开发者 https://www.devze.com 2023-03-23 17:31 出处:网络
I wanted to have an optional date parameter for a method (defaulted to MinValue), in order to check if the user had actually supplied a value or not (supplying MinValue was invalid), but I\'m not allo

I wanted to have an optional date parameter for a method (defaulted to MinValue), in order to check if the user had actually supplied a value or not (supplying MinValue was invalid), but I'm not allowed as apparently it's not a compile-time constant.

According to the MSDN page, "The value of this constant is equivalent to 00:00:0开发者_JAVA技巧0.0000000, January 1, 0001."

So why is that not compile-time constant? And why is it different from passing in Int32.MinValue, which is allowed?


You cannot define a DateTime constant (or structs). From MSDN allowed types for const are:

One of the types: byte, char, short, int, long, float, double, decimal, bool, string, an enum type, or a reference type.


Workaround: Use a nullable as parameter. IMO this is cleaner anyways since the special value is clearly different and not just a normal value.

void A(DateTime? p=null)
{
}

Another alternative is:

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

Which shows that a default parameter can use default(T) as valid default parameter value for user defined types.

Or just overload the method for the different number of parameters.

0

精彩评论

暂无评论...
验证码 换一张
取 消