public static void DatesToPeriodConverter(DateTime start, DateTime? end = null,
out string date, out string time)
{
var effectiveEnd = end ?? DateTime.MinValue;
// ...
}
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)
{ }
public static void DatesToPeriodConverter(DateTime start, DateTime? end , out string date, out string time)
{
if(!end.HasValue){
end = DateTime.MinValue;
}
}
8条答案
按热度按时间xv8emn3q1#
DateTime.MinValue
不是const
,因为语言不喜欢DateTime
上的const
。一种选择是使用DateTime?
代替,即:e.但是,你仍然会遇到非默认参数 * 在 * 默认参数之后的问题-你可能需要重新排序它们以将其用作默认参数。
sh7euo9m2#
请改用常规方法重载:
通常,
default(DateTime)
和DateTime.MinValue
是相同的,并且是编译时间常数,但是我倾向于不使用这种风格(不能保证将来default(DateTime)
会等于DateTime.MinValue
):或者按照Marc的建议,使用
DateTime?
,它允许使用null
默认值。izkcnapc3#
你可以试着这样做:
7cjasjjr4#
将参数end的类型更改为Nullable并使用null作为默认值:
或者使用default(DateTime)作为默认值:
tjjdgumg5#
你说得对。value的默认参数必须是编译时常数。编译器不接受针对可选参数动态计算的值。这背后的原因可能是,您所提供的动态值是否会给予某些有效值并不确定。
yyyllmsg6#
可选参数必须出现在参数列表的末尾。out 参数也必须出现在参数列表的末尾。您的可选参数不是 out 参数。
此外,除了文字常量和一些奇怪的情况之外,您不能为可选参数使用默认值。
所有事实都指向以下方向:
gkn4icbw7#
此错误也可能发生在列表中:
CS1736“dateTimes”的默认参数值必须是编译时常量
你可以这样解决它:
wgx48brx8#
我们可以用默认值创建CONSTANTS类
public const int DEFAULTINT = -9999;
并将其用作常量。DEFAULTINT作为业务默认值。.
希望能有所帮助,