将函数中的默认日期时间参数设置为使用当前年份

本文关键字:设置 参数 函数 默认 时间 日期 | 更新日期: 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参数?