What do the question mark (?
) and colon (:
) mean?
((OperationURL[1] == "GET") ? GetRequestSignature() : "")
It appears in the following statement:
string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");
This question is related to
c#
asp.net
web-services
This is also known as the "inline if", or as above the ternary operator. https://en.wikipedia.org/wiki/%3F:
It's used to reduce code, though it's not recommended to use a lot of these on a single line as it may make maintaining code quite difficult. Imagine:
a = b?c:(d?e:(f?g:h));
and you could go on a while.
It ends up basically the same as writing:
if(b)
a = c;
else if(d)
a = e;
else if(f)
a = g;
else
a = h;
In your case, "string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");"
Can also be written as: (omitting the else, since it's an empty string)
string requestUri = _apiURL + "?e=" + OperationURL[0];
if((OperationURL[1] == "GET")
requestUri = requestUri + GetRequestSignature();
or like this:
string requestUri;
if((OperationURL[1] == "GET")
requestUri = _apiURL + "?e=" + OperationURL[0] + GetRequestSignature();
else
requestUri = _apiURL + "?e=" + OperationURL[0];
Depending on your preference / the code style your boss tells you to use.
string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");
can be translated to:
string requestUri="";
if ((OperationURL[1] == "GET")
{
requestUri = _apiURL + "?e=" + GetRequestSignature();
}
else
{
requestUri = _apiURL + "?e=";
}
It's a ternary operator, or the short form for if..else
.
condition ? value if true : value if false
It is the ternary conditional operator.
If the condition in the parenthesis before the ?
is true, it returns the value to the left of the :
, otherwise the value to the right.
In the particular case you've provided, it's a conditional assignment. The part before the question mark (?) is a boolean condition, and the parts either side of the colon (:) are the values to assign based on the result of the condition (left side of the colon is the value for true, right side is the value for false).
It means if "OperationURL[1]" evaluates to "GET" then return "GetRequestSignature()" else return "". I'm guessing "GetRequestSignature()" here returns a string. The syntax CONDITION ? A : B basically stands for an if-else where A is returned when CONDITION is true and B is returned when CONDITION is false.
Source: Stackoverflow.com