无法在 C# 程序中测试 Null 哈希表值

Can't test for Null hashtable value in C# program

我的 ASP.Net 4.0 网页(用 C# 编写)中有一个名为 EmployeeInformation 的哈希表,我想检查该哈希表中的特定项目 ("DateEff") 是否具有空值。当我使用调试器遍历代码时,我看到 EmployeeInformation["DateEff"] 的值为 {Null}。但是,当我遇到这种情况时:

if (EmployeeInformation["Context"].ToString() != "Existing" && EmployeeInformation["DateEff"] != null && EmployeeInformation["DateEff"].ToString() != "")
     <do something here>

我的代码发现所有三个条件都为真并继续到 "do something here" 代码行。我试过使用

string.IsNullOrEmpty(EmployeeInformation["DateEff"])

也是,但是结果是一样的。我还检查了 EmployeeInformation 是否包含密钥 DateEff 并且确实如此。有谁知道为什么会这样?


根据下面 MethodMan 的评论,我回去看看我是如何填充哈希表的。这是我正在做的事情:

string strDateHired = txtDateHired.Text;
            if (strDateHired == string.Empty)
                dtDateHired = SqlDateTime.Null;
            else
                dtDateHired = Convert.ToDateTime(strDateHired);
            EmployeeInformation.Add("DateEff", dtDateHired);

所以问题是我的值不为空,它是 SqlDateTime.Null。但是我该如何测试呢?我无法将 EmployeeInformation["DateEff"] 转换为 DateTime,因为它是空的。

如果您要求输入一个您知道从未填充过的虚假字段,<do something here> 会 运行 吗?如果是这样,我会质疑 DataEff 是否在您不期望的情况下被填充。

我认为(根据您的说明)Convert.IsDBNull(DateEff) 是正确的。您将该值设置为 DBNull,而不是 c# 定义的 null。

有趣,对吧!?