声明中的问号和冒号意味着什么?这是什么意思?

时间:2011-08-05 13:39:31

标签: c# asp.net web-services

是什么?和冒号意味着什么?

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

在以下声明中......

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

7 个答案:

答案 0 :(得分:95)

这是条件运算符表达式。

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

例如

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

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

对于人们常见的陷阱,请参阅this question中的C# tag wiki

答案 1 :(得分:14)

这是三元conditional operator

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

答案 2 :(得分:7)

这是一个三元运算符,或者if else的简短形式。

条件?值为true:值为false

Here is a link to more information on the subject

编辑:链接修复

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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 :(得分:1)

这也称为"内联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():"");"

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

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 :(得分:0)

这意味着如果“OperationURL [1]”评估为“GET”,则返回“GetRequestSignature()”否则返回“”。我猜这里“GetRequestSignature()”返回一个字符串。语法CONDITION?答:B 基本上代表if-else,当CONDITION为真时返回A,当CONDITION为假时返回B.