检查哈希表值时遇到问题。在下面的代码中,我将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++;
}
}
答案 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 }
谢谢。