我想编写一个扩展方法,将一天添加到Nullable DateTime,但修改日期本身。
我想按如下方式使用它:
someDate.AddOneDay();
这会直接改变someDate的值。
我最初写的代码是:
public static DateTime? AddOneDay(this DateTime? date)
{
if (date.HasValue)
{
date.Value = date.Value.AddDays(1);
}
return null;
}
但这不起作用,因为引用已更改,因此以这种方式调用它 不会改变someDate的值。
有没有办法实现这一目标并避免使用以下代码:
someDate = someDate.AddOneDay();
此外,我正在考虑使用DateTime属性的一些setter,但它们没有任何..
public int Day { get; }
public int Month { get; }
public int Year { get; }
答案 0 :(得分:7)
你不能使DateTime不可变,应该保持这种状态。
只是做:
someDate = someDate.AddOneDay();
如果您想更具体,可以将您的功能重命名为:
DateTime? someDate = someDate.AddOneDayOrDefault();
答案 1 :(得分:3)
旧学校%)
public static void AddOneDay(ref DateTime date)
{
if (date != null) date = date.AddDays(1);
}
用法:
DateTime date = DateTime.Now;
AddOneDay(ref date);
UPD
方法的一行版本:
public static void AddOneDay(ref DateTime date) { date = date.AddDays(1); }
答案 2 :(得分:0)
C#确实支持类似的功能,即使对于可变值,也就是+=
对可空值的使用:
DateTime? date = GetDate();
var oneDay = TimeSpan.FromDays(1);
date += oneDay;