我从SQL Server 2008数据库返回标量值:
string reason = cmd.ExecuteScalar().ToString() ?? : "";
Run Code Online (Sandbox Code Playgroud)
我想确保if null返回,那reason = ""并且不是null.
我在这一行上收到错误:
错误3无效的表达式术语':'
怎么解决这个问题?
编辑:
谢谢你对冒号的更改,现在我在同一行上得到了这个异常:
string reason = cmd.ExecuteScalar().ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)System.NullReferenceException occurred Message="Object reference not set to an instance of an object."
mar*_*c_s 10
试试这个:
string reason = cmd.ExecuteScalar().ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)
但是:这仍然会失败,因为如果.ExecuteScalar()返回a NULL,你已经通过调用.ToString()那个NULL值引起了Null Reference Exception ......
所以我想这里的??运营商真的没有帮助你......做"平时"的舞蹈:
object result = cmd.ExecuteScalar();
if(result != null)
{
reason = result.ToString();
}
else
{
reason = "(NULL value returned)";
}
Run Code Online (Sandbox Code Playgroud)
首先,你不应该:使用时?? 运营商.
其次,要在这里做你想做的事情而不会出现错误,你需要做不同的事情:
object objReason = cmd.ExecuteScalar();
string reason = objReason == null ? "" : objReason.ToString();
Run Code Online (Sandbox Code Playgroud)
这将检查您的返回值是否为空,如果是,则第二行将原因设置为空字符串,否则它将使用您返回的值.
因为可能是你不应该调用的ExecuteScalar()返回object,因为那可能会抛出异常.null.ToString()
string reason = Convert.ToString(cmd.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为Convert.ToString()将转换null为string.Empty
或者如果你必须使用??因为你真的喜欢它:
(cmd.ExecuteScalar() ?? (object)"").ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |