约会时间? 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); }
我想编写一个扩展方法,将一天添加到 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); }