Ank*_*kit 48 .net c# parameters
这是我的方法签名.尝试传递end
作为可选参数时,它会给我这个错误.我该怎么做才能解决这个问题?为什么不是DateTime.MinValue
一个常数?
public static void DatesToPeriodConverter(DateTime start, DateTime end = DateTime.MinValue,
out string date, out string time)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 71
DateTime.MinValue
不是const
,因为语言不喜欢const
的DateTime
.一种选择是使用DateTime?
,即
public static void DatesToPeriodConverter(DateTime start, DateTime? end = null,
out string date, out string time)
{
var effectiveEnd = end ?? DateTime.MinValue;
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,在默认参数之后仍然存在非默认参数的问题- 您可能需要重新排序它们以将其用作默认参数.
Ada*_*rth 16
改为使用常规方法重载:
public static void DatesToPeriodConverter(DateTime start, out string date, out string time)
{
DatesToPeriodConverter(start, DateTime.MinValue, out date, out time);
}
public static void DatesToPeriodConverter(DateTime start, DateTime end, out string date, out string time)
{ }
Run Code Online (Sandbox Code Playgroud)
atlernative,和编译时间default(DateTime)
一样,DateTime.MinValue
并且是编译时间常数,但是我倾向于使用这种风格(以后不能保证default(DateTime)
等于DateTime.MinValue
):
public static void DatesToPeriodConverter(DateTime start, DateTime end = default(DateTime), out string date, out string time)
Run Code Online (Sandbox Code Playgroud)
或者正如Marc建议的那样,使用DateTime?
允许null
默认值.
您可以尝试这样做:
public static void DatesToPeriodConverter(DateTime start, DateTime? end , out string date, out string time)
{
if(!end.HasValue){
end = DateTime.MinValue;
}
}
Run Code Online (Sandbox Code Playgroud)
将参数 end 的类型更改为 Nullable 并使用 null 作为默认值:
public static void DatesToPeriodConverter(DateTime start, DateTime? end = null, out string date, out string time)
Run Code Online (Sandbox Code Playgroud)
或使用 default(DateTime) 作为默认值:
public static void DatesToPeriodConverter(DateTime start, DateTime end = default(DateTime), out string date, out string time)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
50651 次 |
最近记录: |