如何检查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.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(所以我想先检查它,然后传递正确的值或DBNull。

我的问题是,这个"if"总是重试true!为什么?

也尝试过:

if (mo.StartDate.Value == null)

但它总是返回false。为什么它不是null?它甚至还没有被创造出来。。

所以如何检查DateTime对象是否未分配

试试这个:


if (mo.StartDate.GetValueOrDefault() != DateTime.MinValue) 
{
  // True - mo.StartDate has value
}
else
{
  // False - mo.StartDate doesn't have value
}

应该只能进行

mo.StartDate != null 

而不是

mo.StartDate.Value != null

使用该类运行最简单的测试(如您所示(会产生false:

        var mo = new Myobject();
        Console.WriteLine(mo.StartDate.HasValue);

输出为False。

我会在你的构造函数上设置一个断点(如果你有断点的话(,确保没有其他东西被赋值,并遍历沿途调用的任何方法,以确保没有其他任何东西设置可能不会立即明显的属性。。。

也许你能发布更多的代码吗?设置属性的代码中一定有未发布的内容。

.HasValue==null是检查是否为DateTime?赋值的方法。你做得对。其他地方可能存在.HasValue总是返回true的问题。

检查null的方式很好,必须有其他东西在设置字段的值。


要找到设置字段的内容,您可以右键单击它,然后查找所有引用,然后扫描列表中的任何分配。

如果失败,您可以将其临时更改为显式定义的属性,并在set方法中设置断点,然后每当设置值时,执行就会暂停,您可以查找调用堆栈。

相关内容

  • 没有找到相关文章

最新更新