有没有办法更改TimeSpan对象的值?

时间:2017-04-25 16:34:40

标签: c#

我定期以毫秒为单位获取新的时间值,并且需要采用" 00h 00m 00s"这样的形式,因此考虑使用 TimeSpan ,因为它'很简单易用。

TimeSpan t = TimeSpan.FromMilliseconds(timeValue);

但我现在担心的是GC。我不认为每次调用 FromMilliseconds()都是个好主意,因为它似乎始终会创建一个新实例。 我需要每0.1秒左右更新一次时间值,所以如果有办法直接修改TimeSpan对象的值,它对我的​​情况非常有用。否则,我想我需要自己创建一个方法..

有可能吗?

3 个答案:

答案 0 :(得分:2)

TimeSpan是不可变的。

如果要更改其值,则必须创建新的TimeSpan实例。从docs可以看出,所有属性都是get-only。

但不要担心GC!当您遇到性能问题时,只会担心它。我认为TimeSpan占据的空间很小。

答案 1 :(得分:2)

  

...所以,如果有办法直接修改TimeSpan对象的值,它对我的​​情况非常有用。 ...

     

有可能吗?

不,无法修改TimeSpan的实例,它是不可变的struct

  

否则,我认为我需要自己创建一个方法..

你很可能。您是否绝对确定现有TimeSpan的性能含义对您的应用程序真正重要?您是否已分析应用程序以验证创建TimeSpan的新实例是否会导致性能问题。即使那个的情况(不太可能),你确定你的自己的代码会更好吗? .NET框架旨在被广泛使用;虽然它并不完美,但通常都很好。

答案 2 :(得分:0)

将其视为更改int的值。如果你这样做

int x;
x = 5;
x++;

您永远不会更改int的值。您正在更改x的值。

这听起来像是分裂头发,但听起来你想要做的就是更改包含TimeSpan的变量的值,而不是更改实际的TimeSpan

这可能有多种形式,但是,你可以做到。它看起来非常类似于修改整数变量。

var t = new TimeSpan(1,0,0);  // One day
t += TimeSpan.FromMinutes(1); // Add one minute