Que fait le ? et le côlon signifie?
((OperationURL[1] == "GET") ? GetRequestSignature() : "")
Dans la déclaration suivante ...
string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");
C'est l'expression de l'opérateur conditionnel.
(condition) ? [true path] : [false path];
Par exemple
string value = someBooleanExpression ? "Alpha" : "Beta";
Donc, si l'expression booléenne est vraie, la valeur contiendra "Alpha", sinon, elle contiendra "Bêta".
Pour un piège courant dans lequel les gens tombent, voir cette question dans le wiki de la balise C # .
C'est le ternaire opérateur conditionnel .
Si la condition entre parenthèses avant le ?
est vrai, la valeur à gauche du :
, sinon la valeur à droite.
C'est un opérateur ternaire, ou une forme abrégée pour if else.
condition? valeur si vrai: valeur si faux
Voici un lien pour plus d'informations sur le sujet
edit: lien corrigé
Dans le cas particulier que vous avez fourni, il s'agit d'une affectation conditionnelle. La partie précédant le point d'interrogation (?) Est une condition booléenne et les parties situées de part et d'autre du deux-points (:) sont les valeurs à affecter en fonction du résultat de la condition (le côté gauche des deux-points correspond à la valeur true, right side est la valeur de false).
Ceci est également appelé "inline if" ou comme ci-dessus l'opérateur ternaire. https://en.wikipedia.org/wiki/%3F :
Il est utilisé pour réduire le code, bien qu'il ne soit pas recommandé d'en utiliser beaucoup sur une seule ligne car cela peut rendre le maintien du code assez difficile. Imaginer:
a = b?c:(d?e:(f?g:h));
et vous pourriez continuer pendant un moment.
En fin de compte, cela revient à écrire:
if(b)
a = c;
else if(d)
a = e;
else if(f)
a = g;
else
a = h;
Dans votre cas, "string requestUri = _apiURL +"? E = "+ OperationURL [0] + ((OperationURL [1] ==" GET ")? GetRequestSignature ():" ");"
Peut aussi être écrit comme: (en omettant le reste, puisqu'il s'agit d'une chaîne vide)
string requestUri = _apiURL + "?e=" + OperationURL[0];
if((OperationURL[1] == "GET")
requestUri = requestUri + GetRequestSignature();
ou comme ceci:
string requestUri;
if((OperationURL[1] == "GET")
requestUri = _apiURL + "?e=" + OperationURL[0] + GetRequestSignature();
else
requestUri = _apiURL + "?e=" + OperationURL[0];
Selon votre préférence/le style de code que votre patron vous dit d'utiliser.
string requestUri = _apiURL + "?e=" + OperationURL[0] + ((OperationURL[1] == "GET") ? GetRequestSignature() : "");
peut être traduit en:
string requestUri="";
if ((OperationURL[1] == "GET")
{
requestUri = _apiURL + "?e=" + GetRequestSignature();
}
else
{
requestUri = _apiURL + "?e=";
}
Cela signifie que si "OperationURL [1]" est évalué à "GET", alors renvoyez "GetRequestSignature ()" sinon return "". Je suppose que "GetRequestSignature ()" renvoie ici une chaîne. La syntaxe CONDITION? A: B signifie fondamentalement un if-else où A est renvoyé lorsque CONDITION est vrai et B est renvoyé lorsque CONDITION est faux.