2013-10-21 19 views
-3

我有一个具有DateTime类型的两个成员(_starttime和_stoptime)的对象。为什么DateTime.Add不会将引用返回给新的DateTime对象?

当我在调试器中调用以下方法时,一切都按预期工作。 _stoptime将成为未来基于TimeSpan Timetime值设置的新DateTime对象的引用。

但是,如果我将对象部署到服务器并调用它,那么它会返回对原始DateTime对象(_starttime)的引用。

我很困惑。有什么想法吗?

public void Restart() 
    { 
     _starttime = DateTime.Now; 
     _stoptime = _starttime.Add(_waittime); 
    } 

补充:

后,我改变了我的值通过测试:

  Debug.Assert( Object.ReferenceEquals(RunInterval.StartTime, RunInterval.StopTime), "StartTime and StopTime are a reference same object"); 

RunInterval是对象和属性只返回内部成员..

就像我之前说过的那样,如果我在Visual Studio中,它会按预期工作。我怀疑某些优化正在进行,我不知道。

+9

你将不得不证明。 – Will

+1

另外,'DateTime'是一个值类型。这些是直接的价值观,而不是参考。这意味着你断言'Add'什么都不做。 – Jon

+3

我猜想,出于某种原因,'_waittime'的间隔是0s。你将不得不检查原因。 –

回答

2

添加一些Trace.Assert陈述来断言你认为是真的。例如:

Trace.Assert(_waittime > (TimeSpan)0); 
Trace.Assert(_stoptime == _starttime + _waittime); 

可能一分钱会下降,你会发现你的代码中的错误,没有人会从你发布的小片段中找到。

+0

酷我还没有添加_waittime的测试我会尝试,但我没有看到它如何在Visual Studio中工作,但不是当它在服务器上。 – Scott

+0

您对_waittime TimeSpan不大于零是正确的。我添加了一个测试,当我设置_waittime并显示它自己。还没有弄清楚在Visual Studio中与在服务器上运行的版本有什么不同,但现在应该很容易,因为我有一个参考点,谢谢! – Scott

相关问题