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)」ではなく「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 に答える