簡體   English   中英

DateTime.Now作為參數值C#

[英]DateTime.Now as parameter value C#

我有一個方法,其具有DateTime類型的參數,該參數不能在過去,這表示何時執行其他一些東西。 所以很自然地我想使用這個方法並將DateTime.Now傳遞給它,以便一切盡快發生。

這里的問題是調用時的DateTime.Now和實際檢查時的DateTime.Now可能是不同的值,所以我如何確保日期不是過去,但允許方法用DateTime.Now之類的東西來調用? 我不想在這里添加幻數,而是一般的解決方案。

UPDATE。 我發現了這個問題DateTime.Now的頻繁更新

在我看來,你有兩個選擇:

  1. 添加適當的少量時間到現在(1秒說),這樣你幾乎可以立即觸發事情。 這會奏效,但不好看。
  2. 添加另一個不占用時間參數的方法(重載),而是立即執行操作,例如

    DoAction(attime); - 將在規定時間執行操作

    DoAction(); - 現在就行動吧

后者是一個更好的解決方案,但顯然可能存在方法可供使用的方式/位置的問題(並假設您無論如何都可以添加方法)。

如果你希望盡快發生所有事情,為什么不在調用它時重寫你的方法來運行,或者在調用時立即創建一個沒有DateTime參數運行的重載。

當然,使用重載將允許您在將來的某個時間運行代碼(使用DateTime重載)或立即運行。

這是一個哲學問題 - DateTime.Now總是在過去。

將條目上的參數與DateTime.Now進行比較。 如果它在過去,則使用DateTime.Now。

或者,不要使用參數; 只需使用DateTime.Now。

如果時間足夠接近,測試時必須有一定的容差。

讓你的函數采用Nullable<DateTime> 將空時間解釋為“立即執行此操作”。

如果檢查傳遞的DateTime參數是否等於或大於函數開頭的DateTime.Now,則在使用DateTime.now調用函數和檢查函數之間系統時間發生變化的可能性極小。是。 系統時間僅每10或15毫秒更新一次,實際的函數調用時間遠小於此值。

但是,為了確保這種情況永遠不會發生,你必須檢查DateTime.Now.Subtract(new TimeSpan(0, 0, 0, 0, 25))的傳遞時間,這樣可能會有一點時間a過去的一點點被接受了。

如果你的日期arg是過去的話,拋出一個ArgumentException? 這似乎是最簡單的。

對於參數,請使用返回DateTime值的委托。 調用該函數時,傳入一個指向返回DateTime.Now的函數的委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM