2017-09-12 4 views
-2

Contexte

En PHP, il est un raccourci pour l'opérateur ternaire:Existe-t-il un raccourci pour l'opérateur ternaire en C#?

$value = ""; 
echo $value ?: "value was empty"; // same as $value == "" ? "value was empty" : $value; 

Dans JS il y a aussi un équivalent:

var value = ""; 
var ret = value || "value was empty"; // same as var ret = value == "" ? "value was empty" : value; 

Mais en C#, il y a (pour autant que je sache) seule la version "complète" fonctionne:

string Value = ""; 
string Result = Value == string.Empty ? "value was empty" : Value; 

Donc ma question est la suivante: y a-t-il un raccourci pour l'opérateur ternaire en C#, et sinon, y a-t-il une solution?

recherche

Je trouve les questions suivantes, mais ils se réfèrent à utiliser l'opérateur ternaire comme raccourci pour if-else:

shorthand If Statements: C#

Benefits of using the conditional ?: (ternary) operator

Et celui-ci , mais cela concerne Java:

Is there a PHP like short version of the ternary operator in Java?

Ce que j'ai essayé

Utilisez le style sténographique de PHP (a échoué en raison d'une erreur de syntaxe)

string Value = ""; 
string Result = Value ?: "value was empty"; 

Utilisez le style sténographique de JS (a échoué parce que "L'opérateur || n'est pas applicable string et string. «)

string Value = ""; 
string Result = Value || "value was empty"; 
+0

mais l'opérateur ternaire est à courte portée. Est-ce vraiment si difficile de taper une ligne de code? – Liam

+2

Vos exemples exploitent le principe des valeurs truey et falsey, un concept qui n'existe pas (par défaut) en C# fortement typé. –

+0

'valeur || "value was empty" 'n'est pas une main courte pour un opérateur ternaire. C'est une déclaration logique. Ce n'est pas la même chose. Javascript a juste tendance à forcer les valeurs car il n'est pas fortement typé, contrairement à C# – Liam

Répondre

9

Il n'y a pas un raccourci quand la chaîne est vide Il y a un raccourci lorsque la chaîne est null.

string Value = null; 
string Result = Value ?? "value was null"; 
4

L'opérateur soudent ?? ne fonctionne que sur null, mais vous pourrait « personnaliser » le comportement avec une méthode d'extension:

public static class StringExtensions 
{ 
    public static string Coalesce(this string value, string @default) 
    { 
     return string.IsNullOrEmpty(value) 
      ? value 
      : @default; 
    } 
} 

et que vous utilisez comme ceci:

var s = stringValue.Coalesce("value was empty or null"); 

Mais je ne pense pas que ce soit beaucoup mieux que le ternaire.

Remarque: le @ vous permet d'utiliser des mots réservés comme noms de variables.