web-dev-qa-db-fra.com

Point d'interrogation et deux points signifient dans la déclaration? Qu'est-ce que ça veut dire?

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() : "");
63
001

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 # .

98
Anthony Pegram

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.

14
Oded

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é

7
Spooks

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).

1
Anthony Grist

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.

1
T.S
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=";
}
1
Kimtho6

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.

0
mtijn