以下代码使用comparison
运算符可以正常编译。
If(dateTimeVariable > SqlDateTime.MinValue) //compiles Ok. dateTimeVariable is of type DateTime
{
}
但是,以下代码无法编译。
DateTime dateTimeVariable=SqlDateTime.MinValue;
//Throws exception , cannot convert source type SqlDateTime to DateTime. Which is obvious.
我的问题是,为什么
comparison
和SqlDateTime
类型之间允许使用Datetime
,但不允许assignment
。 (除非comparison
运算符进行某些implicit
转换。)我猜我一定会缺少一些真正的基本知识。
最佳答案
SqlDateTime
中有一个隐式转换,无需任何额外的工作即可将DateTime
转换为SqlDateTime
:
public static implicit operator SqlDateTime(DateTime value)
{
return new SqlDateTime(value);
}
// SqlDateTime mySqlDate = DateTime.Now
必须发生的是,将
dateTimeVariable
从DateTime
隐式转换为SqlDateTime
进行比较:if (dateTimeVariable > SqlDateTime.MinValue)
{
// if dateTimeVariable, after conversion to an SqlDateTime, is greater than the
// SqlDateTime.MinValue, this code executes
}
但是在以下代码的情况下,没有什么可以让您简单地将
SqlDateTime
填充到DateTime
变量中,因此它是不允许的。DateTime dateTimeVariable = SqlDateTime.MinValue; // fails
转换初始值,它将可以编译,但是有可能您会丢失一些有价值的信息,这些信息属于
SqlDateTime
而不是DateTime
。DateTime dateTimeVariable = (DateTime)SqlDateTime.MinValue;