c# - 为什么 null 合并运算符会破坏我在 c# 中的字符串赋值?

标签 c# asp.net

我正在 Web 表单中创建一个查询字符串,并且正在处理来自可能为空的参数的值。有很多方法可以检查和修复这些问题,但我发现最优雅的方法如下:

string pass;
pass = "BillabilityDetail.aspx?_startDate=" + _startDate.Text + "&_endDate=" + _endDate.Text + 
       "&_isContractor=" + _isContractor.SelectedValue + "&_busUnit=" + _busUnit.Text 
       + "&_projectUnit=" + _projectUnit.SelectedValue + "&_leadCon=" + _leadCon.Value ?? -1
       + "&_acctExec=" + _acctExec.Value ?? -1 + "&_isBillable=" + _isBillable.SelectedValue + 
       "&_isActive=" + _isActive.SelectedValue + "&_include=" + _include.SelectedValue;

唯一的问题是……它不起作用。当代码到达这部分时,

"&_leadCon=" + _leadCon.Value ?? -1 + "&_acctExec=" + _acctExec.Value ?? -1 

字符串停止赋值。所以该字符串将以 &_leadCon= 结尾。 我知道解决这个问题的方法,但我不知道为什么它首先停止工作。有什么建议吗?

最佳答案

+ 的优先级高于 ??,因此您需要将 null 合并表达式括在括号中。

"&_leadCon=" + (_leadCon.Value ?? -1) + "&_acctExec=" + (_acctExec.Value ?? -1 )

See the precedence chart here

关于c# - 为什么 null 合并运算符会破坏我在 c# 中的字符串赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398208/

相关文章:

c# - INSERT 和 UPDATE 的执行状态 - MS SQL Server

c# - 如何使用 nunit 测试 DbProviderFactories

c# - 有SIMD指令集的宏吗?

c# - 使用 Google Sheets API 无需身份验证

c# - 如何使用具有未知数量值的 IN 条件进行选择查询

c# - 每 5 秒将数据从一个表复制到另一个 @mysql 数据库

c# - “DropDownList”具有无效的 SelectedValue,因为它不存在于项目列表中

asp.net - 图片下拉列表

c# - MVC 模型绑定(bind) - 抽象集合属性

asp.net - 检索ASP.Net的URL中的 anchor 链接