这是我的方法签名。在尝试end
作为可选参数传递时,它给了我这个错误。我应该怎么做才能解决这个问题?为什么不是DateTime.MinValue
常数?
public static void DatesToPeriodConverter(DateTime start, DateTime end = DateTime.MinValue,
out string date, out string time)
这是我的方法签名。在尝试end
作为可选参数传递时,它给了我这个错误。我应该怎么做才能解决这个问题?为什么不是DateTime.MinValue
常数?
public static void DatesToPeriodConverter(DateTime start, DateTime end = DateTime.MinValue,
out string date, out string time)
DateTime.MinValue
不是 a const
,因为语言不喜欢const
on DateTime
。一种选择是DateTime?
改用,即
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)
{ }
或者,default(DateTime)
与相同,DateTime.MinValue
并且是编译时间常数,但我倾向于不使用这种风格(不能保证将来default(DateTime)
会等于DateTime.MinValue
):
public static void DatesToPeriodConverter(DateTime start, DateTime end = default(DateTime), out string date, out string time)
或者正如 Marc 建议的那样,使用DateTime?
which 允许null
默认值。
您可以尝试这样做:
public static void DatesToPeriodConverter(DateTime start, DateTime? end , out string date, out string time)
{
if(!end.HasValue){
end = DateTime.MinValue;
}
}
将参数 end 的类型更改为 Nullable 并使用 null 作为默认值:
public static void DatesToPeriodConverter(DateTime start, DateTime? end = null, out string date, out string time)
或使用 default(DateTime) 作为默认值:
public static void DatesToPeriodConverter(DateTime start, DateTime end = default(DateTime), out string date, out string time)
你是对的。value 的默认参数必须是编译时间常数。编译器不接受针对可选参数的动态计算值。这背后的原因可能是不确定您提供的动态值是否会给出一些有效值。
可选参数必须出现在参数列表的末尾。out参数也必须出现在参数列表的末尾。您的可选参数不是输出参数。
此外,除了文字常量和一些奇怪的极端情况之外,您不能对可选参数使用默认值。
所有事实都指向以下方向:
我们可以使用默认值创建 CONSTANTS 类
公共常量 int DEFAULTINT = -9999;
并将它们用作 CONSTANTS.DEFAULTINT 作为业务默认值..
希望能帮助到你,