【发布时间】:2021-08-11 14:33:41
【问题描述】:
在下面的代码中:
void Main()
{
DateTime cleanDate = DateTime.Now.ToCleanDateTime();
DateTime? nullableCleanDate = DateTime.Now;
nullableCleanDate = nullableCleanDate.ToCleanDateTime();
cleanDate.Dump();
nullableCleanDate.Dump();
}
public static class Extensions
{
//public static DateTime ToCleanDateTime(this DateTime dt)
//{
// dt = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0, 0);
// return dt;
//}
public static DateTime? ToCleanDateTime(this DateTime? dt)
{
if (dt.HasValue)
dt = new DateTime(dt.Value.Year, dt.Value.Month, dt.Value.Day, 0, 0, 0, 0);
return dt;
}
}
这一行DateTime cleanDate = DateTime.Now.ToCleanDateTime(); 抛出以下异常。
“System.DateTime”不包含“ToCleanDateTime”的定义 和最好的扩展方法重载 'Extensions.ToCleanDateTime(System.DateTime?)' 有一些无效 论据
如果我在 DateTime public static DateTime ToCleanDateTime(this DateTime dt) 的扩展方法中发表评论,则不会引发错误。
谁能启发我:
- 为什么会抛出这个错误(除了明显的错误)?
- 有没有办法将这两个扩展组合成一个方法?
我以某种方式期望public static DateTime? ToCleanDateTime(this DateTime? dt) 能够同时处理DateTime 和DateTime?。
【问题讨论】:
-
正如您的回答所说,
DateTime!=DateTime?因为DateTime?被编译器转换为Nullable<DateTime>。它是一种完全不同的类型。