我在C#应用程序中处理DateTime数据时有一种奇怪的情况,需要正确地重构我的代码。代码如下:
DateTime start = new DateTime();
DateTime end = new DateTime();
String inDate = "";
String outDate = "";
String inTime = "";
String outTime = "";
inDate = DataObject.InDate();
outDate = DataObject.OutDate();
inTime = DataObject.InTime();
outTime = DataObject.OutTime();
//I have check for null as the database may return null values
if (!String.IsNullOrEmpty(inDate) && !String.IsNullOrEmpty(inTime))
{
scheduleStart = DateTime.Parse(Convert.ToDateTime(inDate).ToShortDateString() + " " + clockInTime);
}
if (!String.IsNullOrEmpty(outDate) && !String.IsNullOrEmpty(outTime))
{
scheduleEnd = DateTime.Parse(Convert.ToDateTime(outDate).ToShortDateString() + " " + outTime);
}
if (start != null && end != null)
{
TimeSpan span = end.Subtract(start);
}
这一行if (start != null && end != null)
抱怨说它永远都是真的。我想过去除scheduleStart
和end
变量的初始化。现在,if (start != null && end != null)
行抱怨使用未初始化的变量。我考虑过对DateTime?
和start
变量使用end
。现在,我得到的错误是,DateTime?
没有Subtract()
的定义。不幸的是我必须使用这种方法。那么,解决此问题和重构此代码的最佳方法是什么?
答案 0 :(得分:1)
scheduleStart.Value.Subtract
确实存在。或者,如果您已完成DateTime
检查,则可以转为null
。
答案 1 :(得分:0)
使用DateTime?
作为开头和结尾,然后在您知道.Value
时使用null
:
DateTime? scheduleStart = null;
DateTime? scheduleEnd = null;
if (scheduleStart != null && scheduleEnd != null)
{
TimeSpan span = scheduleEnd.Value.Subtract(scheduleStart.Value);
}