约会时间? AddDays 扩展方法

DateTime? AddDays Extension Method

我想编写一个扩展方法,将一天添加到 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();

我还考虑了一些 setter 的 DateTime 属性,但它们没有..

public int Day { get; }
public int Month { get; }
public int Year { get; }

你不能 DateTime 是不可变的,应该保持不变。

就做:

someDate = someDate.AddOneDay();

如果您想更具体一些,您可以将函数重命名为:

DateTime? someDate = someDate.AddOneDayOrDefault();

C# 确实支持类似的功能,即使对于可变值也是如此,即对可空值使用 +=

DateTime? date = GetDate();
var oneDay = TimeSpan.FromDays(1);
date += oneDay;

老派 %

public static void AddOneDay(ref DateTime date)
{
    if (date != null) date = date.AddDays(1);
}

用法:

DateTime date = DateTime.Now;
AddOneDay(ref date);

更新

方法的一行版本:

public static void AddOneDay(ref DateTime date) { date = date.AddDays(1); }