如何处理Hashtable null值?

时间:2010-08-12 08:01:18

标签: c# asp.net

检查哈希表值时遇到问题。在下面的代码中,我将60个值存储在散列表“hash”中。其中一个值是(或可以)Null。我正在检查每个条目与哈希表“hash1”中的相应条目,以查看它们是否相互匹配。如果它们不匹配,我想检查“hash”中的值是否为Null,但是我无法捕获它 - 它正在通过“else”部分掉落。我怎样才能克服这个问题?

if (hash[j].ToString() == "")
{
    NotAnswerQuestionCount++;
}

我的代码:

int ctAnsCount=0, flAnsCount=0,NotAnswerQuestionCount=0;
SqlDataAdapter sda = 
    new SqlDataAdapter("select quesno,[Key] from Answerkey" ,con);
DataSet ds = new DataSet();
sda.Fill(ds);

Hashtable hash = new Hashtable();

for (int i = 0; i < 60; i++)
{
    hash[i+1] = ResultsListBox.Items[i].ToString();
}

Hashtable hash1 = new Hashtable();

for (int i = 0; i < 60; i++)
{
    hash1[i+1] = ds.Tables[0].Rows[i][1].ToString();
}

for (int j = 1; j <=60; j++)
{
    if (hash[j].ToString() != hash1[j].ToString())
    {
        if (hash[j].ToString() == "")
        {
            NotAnswerQuestionCount++;
        }
        //else


        flAnsCount++;
    }
    else
    {           
        ctAnsCount++;    
    }
}

5 个答案:

答案 0 :(得分:1)

在使用ToString()之前测试hash1 [i]!= null。

答案 1 :(得分:1)

您可以尝试使用if(string.InNullOrEmpty(hash1[i]))或在调用ToString()之前检查null。

if (hash[i] != null &&
    hash[i].ToString() == "")
    {
        ...

答案 2 :(得分:0)

我不认为你的意思是空的,我认为你的意思是空洞的。您正在检查'hash'的内容,看起来它是从ListBox填充的,但AFAIK ListBox项不能为null。此外,您正在检查它是否与空字符串("")匹配。

你怎么知道ListBox中有一个空字符串?尝试在检查之前修剪该值(即if (hash[j].ToString().Trim() == "")以捕获空字符串以及仅包含空格的字符串。或者输出每个ListBox项的内容以进行调试,用分隔符括起来检查您实际上,就像这样:

foreach (Object o in ResultsListBox.Items) {
  Debug.WriteLine("'" + o.ToString() + "'");
}

答案 3 :(得分:0)

从C#6开始,您可以使用Null-conditional operator ?.

if (hash[i]?.ToString() == "") { ...

答案 4 :(得分:0)

如果要检查哈希对象是否为空或大小为零。

我认为你可以这样做

if (hash!= null || hash.Keys.Count==0) { blah }

谢谢。