在函数中设置默认日期时间参数以使用当前年份

时间:2014-08-11 09:55:50

标签: c#

我是编码函数,用于确定给定日期是否在上一个/同一个/明年,并且这些函数可能具有不同的年份#34;日期(财政年度,中国新年等)。

鉴于代码(作为示例)读取:

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组件),因此问题。我已经阅读了提供当前日期的类似问题,但我只需要一年;类似的问题也没有明确地涵盖我的要求,或者似乎无论如何都没有。

3 个答案:

答案 0 :(得分:2)

您使用可为空的参数并为其指定默认值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可以为{{1} }}

即使可以为DateTime参数指定默认值,而DateTime除了null之外,您仍然需要指定一个常量值,所以你将无法处理当前年份&#34;无论如何,它的一部分。

答案 1 :(得分:0)

您必须了解C#编译器在编译时替换默认值; 不是在运行时由JIT或CLR。

因此,不可能有动态可选参数(例如,基于当前年份)。

答案 2 :(得分:0)

在此作为重复问题被关闭之前,我会将其重复的问题作为答案发布(我不喜欢在我的帐户中找到未回答的问题):

How can I create an optional DateTime parameter?