C# 捕获到NullReferenceException。。。?

C# 捕获到NullReferenceException。。。?,c#,foreach,C#,Foreach,在运行foreach循环之后。我在第二项上得到NullReferenceException,因为查询结果为null。但我有更多的项用于同一个查询,并在richTextBox1上获得结果。因此,如果有任何空结果,我可以继续foreach循环 foreach (string Items in listBox4.Items) { using (OracleCommand crtCommand = new OracleCommand("select REGEXP_REPLACE(dbms_met

在运行foreach循环之后。我在第二项上得到NullReferenceException,因为查询结果为null。但我有更多的项用于同一个查询,并在richTextBox1上获得结果。因此,如果有任何空结果,我可以继续foreach循环

foreach (string Items in listBox4.Items)
{
    using (OracleCommand crtCommand = new OracleCommand("select REGEXP_REPLACE(dbms_metadata.get_ddl('TABLE','" + Items + "'),('" + txtSrcUserID.Text + "...'),'', 1, 0, 'i') from dual", conn1))                           
    {
        richTextBox1.AppendText(Environment.NewLine);
        richTextBox1.AppendText(crtCommand.ExecuteScalar().ToString() + ";");
        richTextBox1.AppendText(Environment.NewLine);
    }                                                      
}

crtCommand.ExecuteScalar().ToString()
更改为
(crtCommand.ExecuteScalar()??string.Empty).ToString()
。这在逻辑上等同于:

  object dbResult = crtCommand.ExecuteScalar();
  if(dbResult == null) 
  {
     richTextBox1.AppendText(";");
  }
  else
  {
     richTextBox1.AppendText(dbResult.ToString() + ";");
  }

如果要完全忽略空结果而不是将其视为空字符串,请使用@SimonWhitehead的代码,这是危险的编程。您确实应该检查
null
。假设你的循环会变大。。我将包括一个
continue
,并让它更清楚地显示您为可读性所做的工作。如果不需要,请省略
继续

var result = crtCommand.ExecuteScalar();

if (result != null) {
    richTextBox1.AppendText(Environment.NewLine);
    richTextBox1.AppendText(result.ToString() + ";");
    richTextBox1.AppendText(Environment.NewLine);
}
else {
    continue;
}

// any other code here.

你可能想解释一下这个??我从PHP来到C#,我从未遇到过??运算符,所以我不认为每个人都有。您有SQL注入漏洞。谢谢,这就是答案。