DateTime.Now作为参数值C#

时间:2009-10-21 15:38:50

标签: c#

我有一个方法,它具有DateTime类型的参数,该参数不能在过去,这表示其他一些东西执行时。所以很自然地我想使用这个方法并将DateTime.Now传递给它,以便一切尽快发生。

这里的问题是,调用时的DateTime.Now和实际检查时的DateTime.Now可能是不同的值,所以我如何确保日期不是过去的,允许使用DateTime.Now之类的方法调用该方法?我不想在这里添加幻数,而是一般解决方案。

更新。我发现了这个问题How frequent is DateTime.Now updated

9 个答案:

答案 0 :(得分:5)

在我看来,你有两个选择:

  1. 添加适当的少量时间到现在(1秒钟说),这样你几乎可以立即触发事情。这样可行,但不太好。
  2. 添加另一个不占用时间参数的方法(重载),而是立即执行操作,例如

    DoAction(attime); - 将在规定时间采取行动

    DoAction(); - 将立即采取行动

  3. 后者是一个更好的解决方案,但显然可能存在方法可供使用的方式/位置的问题(并假设您无论如何都可以添加方法)。

答案 1 :(得分:4)

如果您希望尽快发生所有事情,为什么不在调用方法时重写您的方法,或者在调用后立即创建一个没有DateTime参数运行的重载。

使用重载当然可以让你在将来的某个时间运行代码(使用DateTime重载)或立即运行。

答案 2 :(得分:3)

这是一个哲学问题 - DateTime.Now总是在过去。

答案 3 :(得分:1)

将条目上的参数与DateTime.Now进行比较。如果它在过去,则使用DateTime.Now。

或者,不要使用参数;只需使用DateTime.Now。

答案 4 :(得分:1)

如果时间足够接近,你必须在测试时有一些容忍度。

答案 5 :(得分:1)

让你的函数采用Nullable<DateTime>。将空时解释为“立即执行此操作”。

答案 6 :(得分:1)

如果在函数开头检查传递的DateTime参数是否等于或大于DateTime.Now,则在使用DateTime.now调用函数之间系统时间极不可能发生变化。检查时。系统时间每10或15毫秒更新一次,实际的函数调用时间远小于此。

但是,为了确保永远不会发生,你必须检查DateTime.Now.Subtract(new TimeSpan(0, 0, 0, 0, 25))的通过时间,这样可能会在过去一点点时间被接受。

答案 7 :(得分:0)

如果您的日期arg过去,则抛出ArgumentException?这似乎是最简单的。

答案 8 :(得分:0)

对于参数,请使用返回DateTime值的委托。调用该函数时,传入一个指向返回DateTime.Now的函数的委托。