C# 语句中的问号和冒号。这是什么意思?

C# 语句中的问号和冒号。这是什么意思?,c#,asp.net,web-services,C#,Asp.net,Web Services,问号(?)和冒号(:)是什么意思 它出现在以下语句中: string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : ""); 这是条件运算符表达式 (condition) ? [true path] : [false path]; 比如说 string value = so

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

它出现在以下语句中:

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

这是条件运算符表达式

(condition) ? [true path] : [false path];
比如说

 string value = someBooleanExpression ? "Alpha" : "Beta";
因此,如果布尔表达式为真,则该值将保留“Alpha”,否则将保留“Beta”

要了解人们经常陷入的一个陷阱,请参见。

中的三元结构


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

这是三元运算符,或者是
If..else
的缩写形式

状况?值如果为真:值如果为假


请参阅。

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

可翻译为:

string requestUri="";
if ((OperationURL[1] == "GET")
{
    requestUri = _apiURL + "?e=" + GetRequestSignature();
}
else
{
   requestUri = _apiURL + "?e=";
}
这意味着如果“OperationURL[1]”的计算结果为“GET”,则返回“GetRequestSignature()”或“else return”。我猜“GetRequestSignature()”在这里返回一个字符串。语法条件?A:B 基本上代表if-else,其中A在条件为真时返回,B在条件为假时返回。

这也称为“内联if”,或在三元运算符之上。 :

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

你还可以继续

它的结尾基本上与写作相同:

if(b)
  a = c;
else if(d)
  a = e;
else if(f)
  a = g;
else
  a = h;
在您的例子中,“string requestUri=_apirl+”?e=“+OperationURL[0]+((OperationURL[1]==“GET”)?GetRequestSignature():”)

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

或者像这样:

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

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

value==someBooleanExpression@YuZhang:不,是正确的。示例:字符串值=1==2?“α”:“β”;->价值将保持“Beta”
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;
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];