陈述中的问号和冒号.这是什么意思

本文关键字:是什么 意思 陈述中 | 更新日期: 2023-09-27 18:04:41

问号(?(和冒号(:(是什么意思?
((OperationURL[1] == "GET") ? GetRequestSignature() : "")

它出现在以下声明中:

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

陈述中的问号和冒号.这是什么意思

这是条件运算符表达式。

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

例如

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

所以,如果布尔表达式为true,则值将包含"Alpha",否则,它将包含"Beta"。

关于人们陷入的一个常见陷阱,请参阅C#标签wiki中的这个问题。

它是三元条件运算符。

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

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

条件?value if true:value if false

请参阅Microsoft文档|?:运算符(C#参考(。

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

可以翻译为:

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

这也被称为"inline 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;

在您的情况下,"string 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];

根据您的喜好/老板告诉您使用的代码样式。

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

这意味着如果"OperationURL[1]"的计算结果为"GET",则返回"GetRequestSignature(("else return"。我猜这里的"GetRequestSignature(("会返回一个字符串。语法CONDITION?A:B基本上代表if-else,其中当CONDITION为true时返回A,当CONDITION为false时返回B。