c# - 将 DateTime 与 SqlDateTime.MinValue 进行比较

标签 c# datetime exception

当我将 DateTime 变量与 SqlDateTime.MinValue 进行比较时:

if (StartDate > SqlDateTime.MinValue)
{
  // some code
}

如果 StartDate 为 < SqlDateTime.MinValue,我会得到以下运行时异常:

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

这可以很容易地通过一个小的改变来解决:

if (StartDate > SqlDateTime.MinValue.Value)
{
  // some code
}

我知道在第一个代码片段中我将苹果与橘子进行比较。我不明白的是异常消息。似乎我正在将 DateTime 值分配给 SqlDateTime 变量。

我错过了什么?

最佳答案

.NET native DateTime 类型(具体而言,它是一种结构)拥有比 SqlDateTime 数据类型所能支持的范围更广的可能值。更具体地说,DateTime 值的范围可以从 01/01/0000 到理论上的 12/31/9999。

当编译器试图强制比较类型时,它会尝试放置一个超出(在上下文中或在上下文中“之前”)SqlDateTime 支持的范围之外的 DateTime 值 (MinValue.Value) - 因此会发生溢出。

关于c# - 将 DateTime 与 SqlDateTime.MinValue 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40114222/

相关文章:

c# - 通过数据验证将小时数输入时间表

c# - 每次都强制安装

c# - 使用 Ninject 填充 Log4Net 依赖

python - matplotlib:如何使用标记大小/颜色作为绘图中的额外维度?

c# - Xamarin.IOS 日期格式

c# - 已内联的函数的堆栈跟踪是否在抛出的异常中保留?

c++ - 如何在 C++ 中拆分日期/时间?

c# - 在 C# 中,如何定义自己的异常?

python - 与用户定义的异常相比,内置异常的处理频率如何?

java - 为什么我在简单的 java 程序中遇到 ClassCastException?