鉴于代码(作为示例)读取:
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
组件),因此问题。我已经阅读了提供当前日期的类似问题,但我只需要一年;类似的问题也没有明确地涵盖我的要求,或者似乎无论如何都没有。
答案 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)
在此作为重复问题被关闭之前,我会将其重复的问题作为答案发布(我不喜欢在我的帐户中找到未回答的问题):