Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查DateTime对象是否未分配?_C#_Sql Server 2008_Datetime - Fatal编程技术网

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。