C# 如何检查DateTime对象是否未分配?
所以,首先。代码: 我有一门课:C# 如何检查DateTime对象是否未分配?,c#,sql-server-2008,datetime,C#,Sql Server 2008,Datetime,所以,首先。代码: 我有一门课: public class Myobject { public string Code { get; set; } public DateTime? StartDate { get; set; } } 这是非常简单的来源的一部分: MyObject mo = new MyObject(); mo.Code= "sth"; // NO action on StartDate property! if (mo.StartDate.HasV
public class Myobject
{
public string Code { get; set; }
public DateTime? StartDate { get; set; }
}
这是非常简单的来源的一部分:
MyObject mo = new MyObject();
mo.Code= "sth";
// NO action on StartDate property!
if (mo.StartDate.HasValue)
{
sc.Parameters.Add(new SqlParameter("@inStartDate", mo.StartDate.Value));
}
else
{
sc.Parameters.Add(new SqlParameter("@inStartDate", DBNull.Value));
}
简单的“if”-Sql Server 2008,在获取null Datetime时抛出一个错误(它必须是DBNull.Value)
所以我想先检查它,然后传递right值或DBNull
我的问题是——这个“如果”总是正确的!为什么
还试图:
if (mo.StartDate.Value == null)
但它总是返回false。为什么它不是空的?它甚至没有被创造出来
所以如何检查DateTime对象是否未分配?应该可以这样做
mo.StartDate != null
而不是
mo.StartDate.Value != null
使用该类运行最简单的测试(如您所示)会产生错误:
var mo = new Myobject();
Console.WriteLine(mo.StartDate.HasValue);
输出为假
我会在你的构造函数上设置一个断点(如果你有一个断点的话),确保没有分配任何其他的断点,并遍历沿途调用的任何方法,以确保没有任何其他设置属性的方法不明显
也许你能发布更多的代码吗?代码中必须有未发布的内容设置属性。检查null的方式很好,必须有其他内容设置字段的值
要查找设置字段的内容,可以右键单击该字段,然后查找所有引用,然后扫描列表以查找任何分配
否则,您可以临时将其更改为显式定义的属性,并在set方法内设置断点,然后每当设置值时执行将暂停,您可以查找调用堆栈。
。HasValue
和==null
是检查日期时间?
是否分配了值的方法。你做得对。其他地方可能存在问题,.HasValue
始终返回true。尝试以下操作:
if (mo.StartDate.GetValueOrDefault() != DateTime.MinValue)
{
// True - mo.StartDate has value
}
else
{
// False - mo.StartDate doesn't have value
}
无法使用提供的代码段再现该条件。还有更多的故事吗?MyObject中还有什么我们应该知道的吗(构造函数等)?同意,不能复制。我在想,一定有什么地方DateTime被设置为您不知道的…?HasValue是检查是否未分配Nullable的正确方法。我认为可能还有另一个问题,您是否检查了调试器中的mo.StartDate.Value(在第一行sc.Parameters.Add中有断点)?尝试检查是否
mo.StartDate.Value DateTime.MinValue
。这真的是一个可为空的日期时间吗?我不认为这是他的主要问题,尽管我们已经展示了他的代码应该可以工作,一定是幕后有什么东西在设置他的属性。我试图展示第二部分的解决方案,其中mo.StartDate.Value==null总是返回false,我为第二部分写了错误的东西,我现在编辑了它。5分钟后,我还要做一次测试,它将在另一个应用程序中启动。这只是一个测试项目,所以名称是非常临时的。我创建了,就像示例一样-我的对象。并只分配“代码”,然后通过WCF将此对象传递给WCF主机-Windows服务。我从不更改这个对象,只传递给另一个函数,最后我想将该对象的属性插入数据库。很简单。为此,我使用存储过程和ADO.NET。