将函数中的默认日期时间参数设置为使用当前年份
本文关键字:设置 参数 函数 默认 时间 日期 | 更新日期: 2023-09-27 18:17:30
我正在编写确定给定日期是否在上一年/相同/明年的函数,这些函数可能有不同的"开始年"日期(财政年度,中国新年等)。
给定代码(作为一个例子)如下:
public static class ValidationFunctions
{
...
public static bool IsPreviousYear(DateTime value)
{
DateTime defaultStartOfYear = new DateTime(DateTime.Now.Year, 1, 1);
return IsPreviousYear(value, defaultStartOfYear);
}
...
public static bool IsPreviousYear(DateTime value, DateTime startOfYear)
{
return value >= startOfYear.AddYears(-1) && value < startOfYear;
}
...
}
如何修改这个函数(或者添加什么,在哪里以及如何添加到类中),以执行相当于:
public static class ValidationFunctions
{
...
public static bool IsPreviousYear(DateTime value)
{
DateTime defaultStartOfYear = new DateTime(DateTime.Now.Year, 1, 1);
return IsPreviousYear(value, defaultStartOfYear);
}
...
public static bool IsPreviousYear(DateTime value, DateTime startOfYear = new DateTime(DateTime.Now.Year, 4, 5))
{
return value >= startOfYear.AddYears(-1) && value < startOfYear;
}
...
}
我理解上面的代码抛出一个ArgumentException和ArgumentOutOfRangeException(主要是由于DateTime.Now.Year
组件),因此问题。我读过类似的问题,提供当前日期,但我只需要年份;类似的问题也没有明确地涵盖我的需求,或者似乎无论如何都没有。
您使用一个可空的参数,并给它一个默认值null
:
public static bool IsPreviousYear(DateTime value, DateTime? startOfYear = null)
{
startOfYear = startOfYear ?? new DateTime(DateTime.Now.Year, 4, 5);
return value >= startOfYear.Value.AddYears(-1) && value < startOfYear.Value;
}
参数的默认值必须是恒定的,并且没有办法指定恒定的DateTime
值,因此唯一可能的值是使用null
和可空的DateTime
。
即使可以为DateTime
参数指定默认值,而不是为可空的DateTime
指定null
,您仍然必须指定一个常量值,因此您将无法处理它的"当前年份"部分。
你必须明白c#编译器会在编译时替换默认值;不是在运行时由JIT或CLR。
因此不可能有一个动态可选参数(例如基于当前年份)。
直到这个问题被关闭为重复的问题,我将把它重复的问题作为答案发布(我不喜欢在我的帐户上有未回答的问题):
如何创建可选的DateTime参数?