Dans cet article, je vais présenter cinq conseils précieux pour le langage C# que vous pouvez appliquer dans votre code.
1- Nombre nullable
Cette astuce repose sur le fait que les nombres peuvent accepter des valeurs nulles. Cette astuce peut sembler étrange pour de nombreux développeurs d’autres langages, car nous utiliserons le symbole ? après le type de données.
Dans ce cas, nous utiliserons int, mais voyons d’abord à quoi cela ressemblerait sans le symbole ?
En exécutant le code ci-dessus, une erreur sera indiquée dans l’Error List.
Désormais, ajoutons le symbole ? à la définition du type du nombre :

Le int? est une forme abrégée pour Nullable<int>, ce qui signifie que la variable peut contenir des valeurs entières ordinaires ou être null. Le null indique l’absence de valeur.
La ligne int? numero = null; initialise la variable numero avec la valeur null, indiquant qu’au départ il n’y a pas de valeur entière attribuée à cette variable.
2- Valeur en lecture seule
Dans une instruction de champ, readonly indique que l’attribution à un champ ne peut se faire que lors de la déclaration ou dans un constructeur de la même classe. Autrement dit, uniquement en lecture.
public static readonly string Url = "macoratti.net";
|
Le mot-clé readonly indique que la valeur de la constante est attribuée une seule fois et ne peut pas être modifiée après attribution.
Cette constante, “macoratti.net“, peut être accessible depuis n’importe quel endroit ayant une visibilité sur la classe qui la contient.
Un exemple d’utilisation de readonly se trouve dans la chaîne de connexion à une base de données, car elle est toujours la même et il n’importe pas que quelqu’un puisse la modifier.
Le readonly est intéressant car : s’il s’agit d’une variable qui ne peut être lue et modifiée…
La définition en constante pourrait-elle s’appliquer à elle ?
L’utilisation de readonly en C# et la définition des constantes (const) diffèrent, mais tous deux possèdent la propriété de rendre une variable immuable après son attribution initiale. Cependant, il existe des différences importantes entre readonly et const.
readonly
- Une variable readonly est attribuée au moment de l’exécution ou dans le constructeur de la classe.
- Elle peut recevoir une valeur différente selon les instances de la classe.
- La valeur est déterminée à l’exécution et peut différer d’une instance à l’autre.
const
- Une constante (const) est attribuée en temps de compilation et est considérée comme une véritable constante.
- La valeur est déterminée à la compilation et est identique pour toutes les instances de la classe ou pour toutes les occurrences dans le même contexte.
- Elle doit être initialisée avec une valeur littérale constante, comme des nombres ou des chaînes définies mot à mot, et ne peut pas être attribuée à partir d’une expression évaluée à l’exécution.
Le readonly est plus flexible, car il permet une attribution à l’exécution et peut avoir des valeurs différentes selon les instances, tandis que const est plus rigide, garantissant une valeur constante lors de la compilation et identique pour toutes les instances.
3- Utilisation des tuples
Les tuples constituent une structure de données en C# qui permet de regrouper des éléments de différents types en une seule unité. Elles ont été introduites dans C# 7.0 et offrent une manière plus flexible et pratique de travailler avec des ensembles de valeurs liées.
Avant l’usage des tuples, l’alternative aurait été de créer une classe ou une structure pour stocker ces valeurs, ce qui pourrait être un peu verbeux pour des cas simples.
Syntaxe de base : var minhaTupla = (valor1, valor2, valor3);
Parfois, il vaut mieux utiliser une tuple contenant des valeurs saisies plutôt que d’utiliser des classes, surtout lorsque la structure de données créée ne sera utilisée que dans un contexte précis.

4- Utilisation de yield
La fonctionnalité yield est utilisée dans les méthodes pour créer des itérateurs personnalisés. Elle permet de renvoyer une séquence de valeurs à partir d’une méthode sans avoir à créer une collection complète en mémoire.
La yield est particulièrement utile lorsque vous travaillez avec de grands ensembles de données ou lorsque vous souhaitez générer des séquences de données à la demande.
Considérons un exemple où nous voulons générer une séquence de nombres pairs jusqu’à une limite donnée sans créer de collection temporaire :
| foreach (var numero in ExemploYield.GerarNumerosPares(10)) { Console.WriteLine(numero); }Console.ReadLine(); public class ExemploYield |
Dans cet exemple, nous ne créons pas une collection temporaire pour stocker tous les nombres pairs jusqu’à la limite. Au lieu de cela, nous utilisons yield pour générer les nombres à la demande pendant que nous parcourons la séquence.
- Quand utiliser le yield :
- Lorsque vous avez besoin de générer une séquence de données à la demande.
- Lorsqu’on travaille avec de grands ensembles de données et qu’on veut éviter le stockage en mémoire de toute la collection.
- Lorsque la création d’une collection temporaire n’est pas efficace ou nécessaire pour la logique de votre programme.
- Quand ne pas utiliser yield :
- Lorsque vous devez accéder plusieurs fois aux éléments de la séquence.
- Lorsque la séquence est petite et qu’il n’y a pas de préoccupation majeure concernant l’utilisation de la mémoire.
- Lorsque la logique de votre programme est plus claire en utilisant une collection complète.
Le yield est puissant dans les situations où l’efficacité de l’utilisation de la mémoire est cruciale et où vous pouvez travailler avec la séquence de manière incrémentale. Cependant, dans certains cas, la création d’une collection temporaire peut être plus appropriée pour faciliter l’accès répété aux données.
5- Les requêtes LINQ sont différées
Dans le LINQ (Language Integrated Query), l’exécution d’une requête LINQ est différée jusqu’à ce qu’elle soit réellement nécessaire. Cela signifie que l’évaluation de la requête ne se produit pas au moment où elle est définie, mais lorsque c’est nécessaire, souvent lors de l’accès aux résultats.
Ainsi, lorsqu’une requête est effectuée dans LINQ, elle ne s’exécute que lorsque les résultats sont consultés. Cela s’appelle une exécution différée. Pour que la requête s’exécute une seule fois, il faut utiliser la méthode ToList.
Cette caractéristique de différer l’exécution est appelée “adiamento de exécution” (deferred execution) et constitue un concept clé en LINQ. L’exécution différée offre des avantages en termes d’efficacité et permet à votre code d’être plus flexible.
Voici un exemple pour illustrer l’exécution différée dans LINQ :

La requête LINQ est définie en utilisant la méthode Where, qui filtre les nombres pairs de la liste. Cependant, notez que l’exécution réelle de la requête n’a pas encore lieu à ce stade.
L’exécution de la requête se produit lorsque nous parcourons les résultats à l’aide d’une boucle foreach. À ce stade, l’expression Where est évaluée et les résultats sont renvoyés.
La sortie du programme montre que le message “Requête définie, mais non encore exécutée” est affiché avant l’itération sur les résultats, indiquant que l’exécution de la requête a été différée jusqu’à ce qu’elle soit réellement nécessaire.
Cette exécution différée vous permet de définir des requêtes LINQ complexes sans les exécuter immédiatement, économisant des ressources et vous permettant de construire des requêtes plus flexibles.




