【问题标题】:Question mark and colon in statement. What does it mean?语句中的问号和冒号。这是什么意思?
【发布时间】:2011-10-20 21:29:59
【问题描述】:

问号 (?) 和冒号 (:) 是什么意思?

((OperationURL[1] == "GET") ? GetRequestSignature() : "")

出现在以下语句中:

string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");

【问题讨论】:

    标签: c# asp.net web-services


    【解决方案1】:

    这是条件运算符表达式。

    (condition) ? [true path] : [false path];
    

    例如

     string value = someBooleanExpression ? "Alpha" : "Beta";
    

    因此,如果布尔表达式为真,则 value 将为“Alpha”,否则为“Beta”。

    有关人们陷入的常见陷阱,请参阅C# tag wiki 中的this question

    【讨论】:

    • 值 == someBooleanExpression
    • @YuZhang :不,它是正确的。示例:字符串值 = 1 == 2? “阿尔法”:“贝塔”; -> 值将保持“Beta”
    【解决方案2】:

    是三元的conditional operator

    如果?之前括号中的条件为真,则返回:左边的值,否则返回右边的值。

    【讨论】:

      【解决方案3】:

      它是一个三元运算符,或if..else 的缩写形式。

      条件?真值:假值

      Microsoft Docs | ?: operator (C# reference)

      【讨论】:

        【解决方案4】:
        string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");
        

        可以翻译成:

        string requestUri="";
        if ((OperationURL[1] == "GET")
        {
            requestUri = _apiURL + "?e=" + GetRequestSignature();
        }
        else
        {
           requestUri = _apiURL + "?e=";
        }
        

        【讨论】:

          【解决方案5】:

          这也称为“内联 if”,或如上述的三元运算符。 https://en.wikipedia.org/wiki/%3F:

          它用于减少代码,但不建议在一行中使用大量这些,因为这可能会使代码维护变得非常困难。 想象一下:

          a = b?c:(d?e:(f?g:h));
          

          你可以继续。

          基本上和写的一样:

          if(b)
            a = c;
          else if(d)
            a = e;
          else if(f)
            a = g;
          else
            a = h;
          

          在您的情况下,“字符串 requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");"

          也可以写成:(省略else,因为它是一个空字符串)

          string requestUri = _apiURL + "?e=" + OperationURL[0];
          if((OperationURL[1] == "GET")
              requestUri = requestUri + GetRequestSignature();
          

          或者像这样:

          string requestUri;
          if((OperationURL[1] == "GET")
              requestUri = _apiURL + "?e=" + OperationURL[0] + GetRequestSignature();
          else
              requestUri = _apiURL + "?e=" + OperationURL[0];
          

          取决于您的偏好/老板告诉您使用的代码风格。

          【讨论】:

            【解决方案6】:

            在您提供的特定情况下,这是一个条件赋值。问号 (?) 之前的部分是布尔条件,冒号 (:) 两边的部分是根据条件结果分配的值(冒号左侧是 true,right side 是 false 的值)。

            【讨论】:

              【解决方案7】:

              这意味着如果“OperationURL[1]”计算结果为“GET”,则返回“GetRequestSignature()”,否则返回“”。我猜这里的“GetRequestSignature()”会返回一个字符串。语法条件?甲:乙 基本上代表一个 if-else,当 CONDITION 为真时返回 A,当 CONDITION 为假时返回 B。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-10-09
                • 2012-09-25
                • 2019-09-14
                • 2021-01-14
                • 1970-01-01
                • 2020-05-21
                相关资源
                最近更新 更多