Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Une instruction méconnue de C#

Quelques mots sur un opérateur méconnu de C# qui pourtant s'avère très efficace..

Vous connaissez la syntaxe: x = (test) ? (sivrai) : (sifaux);
Cela permet en une instruction d'attribuer la valeur "sivrai" ou "sifaux" à x selon le résultat du test. Cela est très pratique et clarifie la lecture du source comparativement à l'utilisation d'un if/else.

Mais connaissez-vous la version courte de cet opérateur conditionnel ?

Le cas d'utilisation est très fréquent dans un code bien protégé : il s'agit en général d'affectuer une valeur à une variable si la valeur est non nulle, sinon d'affecter une valeur par défaut. Exemple :
string s = variable==null ? "chaîne nulle" : variable;
Ici on se protège contre le fait que la variable "variable" peut être nulle. Dans ce cas on affecte à "s" une chaîne par défaut, sinon on affecte "variable". L'utilisation de l'opérateur ?: se justifie pleinement ici (si on suppose par exemple que "variable" est un paramètre passé à la méthode en cours qui peut, même si cela n'est pas prévu, être passé à null). Cet opérateur rend l'écriture plus concise que l'utilisation de if/else qui serait:
string s; 
if (variable==null) s="chaîne nulle"; else s=variable;

Mais il y a encore plus court !

Le cas évoqué étant très fréquent, C# propose un autre opérateur conditionnel, le ??.
Ce dernier est spécialement étudié pour tester les nuls.
De fait, notre test exemple s'écrit désormais :
string s = variable ?? "chaîne vide";

En réalité l'opérateur ?? a surtout été ajouté pour gérer les types nullables. Lorsqu'on affecte une variable nullable à une autre qui ne l'est pas, il est en effet nécessaire de tester le null pour éviter une exception.
Exemple :

int? a = null; 
int y = a ?? -1;

ici, "a" est un integer nullable, que nous initialisons d'ailleurs à null, alors que "y" est un integer "standard" ne pouvant pas prendre la valeur nulle. L'utilisation de ?? est donc obligatoire ici pour éviter l'exception.
On comprend mieux la raison d'être de cet opérateur ajouté dans C# 2.0 puisque c'est dans cette version qu'on aussi été ajoutés les types nullables.

Néanmoins cette instruction très peu utilisée et méconnue rend aussi service en dehors du contexte des types nullables, notamment avec les types objets qui eux sont nullables depuis toujours. Notre exemple avec une variable string en est une illustration.

Bon développements ! (truffés désormais de "??" qui vous feront passer pour un guru de C# :-) )

Nouvelle rentrée, nouveau blog !

Bienvenue à toutes et à tous !

"Vous mé réconnéssé ? " Laughing

Pour ceux qui ne savent pas qui je suis, en deux mots : dirigeant de e-naxos, auteur de plusieurs ouvrages sur Delphi et C# chez Eyrolles, partenaire Borland de longue date (même si depuis le tournant Codegear nos voies se sont séparées), partenaire Microsoft. Ceux qui fréquentent ces milieux m'ont reconnu.

Ce nouveau blog, installé sur mon propre serveur, va me permettre de m'exprimer avec le maximum de liberté.

Non pas que le blog que je possède de longue date sur Developpez soit spécialement censuré, mais vous savez ce que c'est, il ne faut pas froisser untel, ou tel autre qui prend la mouche parce qu'on ne dit pas que du bien de tel produit ou éditeur ... Censure réelle ou auto-censure, le résultat est le même.

J'avais donc besoin d'un espace autogéré, j'ai trouve BlogEngine, un très beau moteur de blog open source en C#, et voilà comment est né Dot.Blog ! Blog avant tout technique, mes humeurs n'y seront pas donc forcément absentes mais Dot.Blog ne sera pas un blog d'opinion. 

C#, le framework .NET, Visual Studio, SQL Serveur, Silverlight, Ajax, Linq, sont autant de sujets qui me viennent à l'esprit et qui feront bientôt l'objet de billets ici.

Alors marquez cette page et revenez souvent y lire et y commenter les billets !

A très bientôt,

Olivier