对?:运算符感到困惑

时间:2011-09-04 16:52:00

标签: c#

我有这段代码:

if (!codeText.StartsWith("<p>"))
{
    codeText = string.Concat("<p>", codeText, "</p>");
}

如何使用?:运算符?

8 个答案:

答案 0 :(得分:4)

由于条件运算符需要else子句,您需要告诉它使用原始值:

codeText = codeText.StartsWith("<p>") ? codeText : "<p>" + codeText + "</p>";

然而,这样做是没有意义的;这更令人困惑。

答案 1 :(得分:3)

codeText = codeText.StartsWith("<p>") ?
               codeText :
               string.Concat("<p>", codeText, "</p>");

答案 2 :(得分:2)

在这种情况下,使用三元运算符没有多大意义。我会坚持你现在的if语句。通常,您可以在赋值语句中使用三元运算符,或者在不能使用典型if语句的地方使用。

然而,如果你真的想,你可以这样做。

codeText = !codeText.StartsWith("<p>") ? string.Concat("<p>", codeText, "</p>") : codeText; 

这是三元运算符的MSDN页面。 http://msdn.microsoft.com/en-US/library/ty67wk28%28v=VS.80%29.aspx

答案 3 :(得分:1)

变量=条件?条件为真时的值:条件为假时的值

答案 4 :(得分:0)

像这样:

codeText = codeText.StartsWith("<p>") ? codeText : string.Concat("<p>", codeText, "</p>");

如果它相当长,我通常会将它写成多行,如下所示:

codeText = codeText.StartsWith("<p>")
  ? codeText
  : string.Concat("<p>", codeText, "</p>");

虽然我不得不承认,我没有看到在这里使用?:运算符的好处,因为你没有其他情况,你必须添加一个codeText = codeText的运算符用它。

答案 5 :(得分:0)

codeText = (!codeText.StartsWith("<p>")?string.Concat("<p>", codeText, "</p>"):codeText);

答案 6 :(得分:0)

你可以这样做:

codeText = codeText.StartsWith("<p>")
    ? codetext
    : string.Concat("<p>", codeText, "</p>");

但我不确定你为什么要那样做。

答案 7 :(得分:0)

/*if*/ condition
     /*then*/? statement1
     /*else*/: statement2

所以,基本上这是建筑:

if(condition){
    //statement1
}else{
    //statement2
}

可以写成:

condition 
    ? statement1
    : statement2;