关于.net:DateTime字段只读

DateTime field read only

本问题已经有最佳答案,请猛点这里访问。

为什么不能为.NET日期时间属性赋值?能够做以下事情会很有用:

1
2
DateTime saveNow = DateTime.Now;
saveNow.Second = 0; //Error, it does not compile


试试这个:

1
DateTime saveNow = DateTime.Now;

saveNow.AddSeconds(-savenow.Second);AddSeconds不改变值,它返回一个新的实例和新的值。此版本工作:

1
saveNow = saveNow.AddSeconds(-savenow.Second);


因为它们是访问器属性,所以是只读的。

1
2
3
DateTime now = DateTime.Now;
DateTime saveNow
   = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0);


我总结了@slaks和@gabe所说的:

datetime是一个结构(不是类),可变结构是错误的做法。在这里查看详细信息为什么可变结构是邪恶的?

因此,日期时间按设计是不可变的。

要将日期时间"秒"字段设置为0,可以使用以下代码:

1
2
3
DateTime now = DateTime.Now;
DateTime saveNow
 = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0);