6
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)”。

有谁知道背后的原因,如果可能的话可以提供参考吗?

4

2 回答 2

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
);
于 2013-03-11T10:41:08.957 回答
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>"

但为了可读性,使用一些中间变量。?:永远不应该嵌套在其他表达式中。

于 2013-03-11T10:42:02.630 回答