【问题标题】:DateTime field read only [duplicate]DateTime 字段只读[重复]
【发布时间】:2013-06-06 08:13:02
【问题描述】:

为什么.Net DateTime 属性不能分配给?能够执行以下操作会很有用:

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

【问题讨论】:

  • 可变值类型是邪恶的。
  • 如果我理解正确,您是在说:DateTime 是一个结构(不是类),而可变结构是不好的做法。这就是为什么它们在设计上是不可变的。

标签: .net datetime


【解决方案1】:

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

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

【讨论】:

  • 是的,但我想知道为什么 DateTime 只有 Get 访问器而没有 Set 访问器。 @SLaks 很快就回答了。谢谢你的代码,这是我解决问题的方式。现在我更加确定这是正确的方法。
  • @user511956 - 请把它标记为答案,因为它解决了你的问题
【解决方案2】:

试试这个:

DateTime saveNow = DateTime.Now;

saveNow.AddSeconds(-savenow.Second); AddSeconds 不会更改值,它会返回具有新值的新实例。此版本有效:

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

【讨论】:

  • 。这不会有任何影响。 DateTime不可变的
  • @SLaks 我编辑了它。现在?
  • @SLaks 谢谢指正
【解决方案3】:

我总结了@SLaks 和@Gabe 所说的话:

DateTime 是一个结构(不是类),可变结构是不好的做法。详情请看这里Why are mutable structs evil?

因此,DateTime 在设计上是不可变的。

要将 DateTime 'seconds' 字段设置为 0,您可以使用以下代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2014-10-03
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多