Lou*_*hys 25 .net c# datetime optional-parameters
通常,如果我有可选参数的可空类型,我会将null作为默认值.这样我知道如果值为null,则调用者不希望为该值指定任何值.
public void Foo(string text, string text2= null);
Run Code Online (Sandbox Code Playgroud)
如果参数通常是正整数,我可以使用负数
public void Foo(string text, int index=-1);
Run Code Online (Sandbox Code Playgroud)
DateTime怎么样?它不是可空的,并且(据我所知)它没有无意义的数字,也不能成为真正的输入(如正整数的-1).还是有吗?在这种情况下你会用什么?
我也知道我可以使用可空DateTime
类型,但这意味着方法调用者必须使用Nullable以及反对只是方便地传递DateTime.
Ada*_*rth 34
您可以使用?
C#中的运算符使值类型为空:
DateTime? myDate = null;
从这里,您可以使参数可选:
void Foo(DateTime? myDate = null)
{
}
Run Code Online (Sandbox Code Playgroud)
这不是皮肤猫然而,你可以使用的唯一方法default(DateTime)
,但是你不能使用DateTime.MinValue
,MaxValue
或Now
在可选参数,因为它们不是编译时间常数.
当然,您不需要使用可选参数,如果您希望使用Min,Max或Now,则可以使用重载方法.
void Foo()
{
Foo(DateTime.MinValue);
}
void Foo(DateTime d)
{
}
Run Code Online (Sandbox Code Playgroud)
如果你想过度杀戮(好吧,也许不是矫枉过正,有很多正当理由这样做),那么你可以定义一个新的日期类型,它可以理解它何时有一个值:
class SmarterDateTime
{
public bool IsSet { get; set; }
// Wrapper around DateTime etc excluded.
}
Run Code Online (Sandbox Code Playgroud)
至于应该是什么默认值,你可以选择让任何日期代表默认值,但是对于像可选参数这样的东西你会有限制.
就个人而言,我倾向于使用DateTime.MinValue
.
Vas*_*sya 15
default(DateTime) - 运算符默认值适用于它
在"什么可以是DateTime的默认值"的问题上,响应必须是:您只能使用default(DateTime)
.这是因为默认值必须是const
两者DateTime.MinValue
并DateTime.MaxValue
只static readonly
,但要注意
default(DateTime) == DateTime.MinValue
Run Code Online (Sandbox Code Playgroud)
到了Kind
.
如果你想要你可以用一个较少的参数(DateTime
)来实现一个重载,并从那个重载调用"main"方法传递你喜欢的值.
但正如其他人所写,问题是你写错了前提.
不,DateTime(几乎所有的ValueType
s.几乎所有因为Nullable<Nullable<int>>
非法,即使Nullable<T>
是a ValueType
)都可以为空.Nullable<DateTime>
或DateTime?
(同样的事情)
int
你知道,即使是可空的吗?int?
:-)
归档时间: |
|
查看次数: |
53868 次 |
最近记录: |