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();
我无法理解为什么上面的代码(从实际代码中修改)总是给我带来奇怪的结果:“ZXCV”而不是“Tom(ZXCV)”。
有没有人知道背后的原因,如果可能的话可以提供参考?
答案 0 :(得分:5)
您在条件表达式周围缺少一些括号。
请改为尝试:
string text = "<option value=\"" + cuID.Value + "\">" + cuName + " (" + (cuEmpID == "" ? "-" : cuEmpID) + ")" + "</option>";
htmlResp.Append(text);
至于为什么缺少的括号导致这种情况发生......这是一个有趣的问题!
要回答这个问题,请稍微简化一下原始代码:
string text = ">>>" + cuEmpID == "" ? "-" : cuEmpID + "<<<"; // Gives "ZXCV<<<"
发生的事情是条件表达式使用">>>" + cuEmpID == ""
作为条件。这不等于“”,因此使用条件表达式的右侧,即cuEmpID + "<<<"
部分,它给出了我们看到的输出。
你应该真正简化表达式,例如:
string normalisedEmpID = cuEmpID == "" ? "-" : cuEmpID;
string text = string.Format
(
"<option value=\"{0}\">{1} ({2})</option>",
cuID.Value,
cuName,
normalisedEmpID
);
答案 1 :(得分:3)
“不要使表达过于复杂”的一个很好的例子。
"<option value=\"" + cuID.Value + "\">" + cuName
+ " ("+cuEmpID==""? "-":cuEmpID+")"+ "</option>");
编译为
("<option value=\"" + cuID.Value + "\">" + cuName+" ("+cuEmpID ) == ""
? "-"
: cuEmpID+")"+ "</option>");
一个简单的'修复'就是
"<option value=\"" + cuID.Value + "\">" + cuName + " ("
+ ((cuEmpID == "") ? "-" : cuEmpID )
+ ")" + "</option>"
但为了便于阅读,请使用一些中间变量。 ?:
永远不应嵌套在其他表达式中。