为什么下面的条件操作符工作奇怪的StringBuilder包含空类型?在c#
本文关键字:包含空 StringBuilder 类型 条件 操作符 工作 为什么 | 更新日期: 2023-09-27 18:03:30
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)"。
有谁知道背后的原因,如果可能的话可以提供参考吗?
您的条件表达式周围缺少括号。
试试这个:
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
);
一个"不要让表达式太复杂"的好例子。
"<option value='"" + cuID.Value + "'">" + cuName
+ " ("+cuEmpID==""? "-":cuEmpID+")"+ "</option>");
被编译为
("<option value='"" + cuID.Value + "'">" + cuName+" ("+cuEmpID ) == ""
? "-"
: cuEmpID+")"+ "</option>");
一个简单的"修复"将是
"<option value='"" + cuID.Value + "'">" + cuName + " ("
+ ((cuEmpID == "") ? "-" : cuEmpID )
+ ")" + "</option>"
,但为了可读性,使用一些中间变量。?:
不应该嵌套在其他表达式中。