oce*_*eam 6 .net c# stringbuilder nullable conditional-operator
StringBuilder htmlResp=new StringBuilder();
int? cuID= 1;
string cuName="Tom";
string cuEmpID="ZXCV";
htmlResp .Append( "<option value=\"" + cuID.Value + "\">" + cuName+" ("+cuEmpID==""? "-":cuEmpID+")"+ "</option>");
html.Resp.ToString();
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么上面的代码(从实际代码中修改)总是给我奇怪的结果:"ZXCV"而不是"Tom(ZXCV)".
有没有人知道背后的原因,如果可能的话可以提供参考?
您在条件表达式周围缺少一些括号.
试试这个:
string text = "<option value=\"" + cuID.Value + "\">" + cuName + " (" + (cuEmpID == "" ? "-" : cuEmpID) + ")" + "</option>";
htmlResp.Append(text);
Run Code Online (Sandbox Code Playgroud)
至于为什么丢失的括号导致这种情况发生......这是一个有趣的问题!
为了回答这个问题,让我简化一下原始代码:
string text = ">>>" + cuEmpID == "" ? "-" : cuEmpID + "<<<"; // Gives "ZXCV<<<"
Run Code Online (Sandbox Code Playgroud)
发生的事情是条件表达式">>>" + cuEmpID == ""用作条件.这不等于"",因此使用条件表达式的右侧,即cuEmpID + "<<<"部分,它给出了我们看到的输出.
你应该真正简化表达式,例如:
string normalisedEmpID = cuEmpID == "" ? "-" : cuEmpID;
string text = string.Format
(
"<option value=\"{0}\">{1} ({2})</option>",
cuID.Value,
cuName,
normalisedEmpID
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |