web-dev-qa-db-fra.com

Initialiser la valeur de 'var' en C # à null

Je veux attribuer une variable à une valeur initiale de null et affecter sa valeur dans le bloc if-else suivant, mais le compilateur donne une erreur,

Les variables locales implicitement typées doivent être initialisées.

Comment pourrais-je y parvenir?

13
Nikhil Chavan

var les variables ont toujours un type - et le message d'erreur du compilateur indique ce type doit être établi lors de la déclaration.

La demande spécifique (attribution d'une valeur nulle initiale) peut être effectuée, mais je ne la recommande pas. Il ne fournit pas d'avantage ici (car le type doit encore être spécifié) et il pourrait être considéré comme rendant le code moins lisible:

var x = (String)null;

Qui est toujours "type déduit" et équivalent à:

String x = null;

Le compilateur ne le fera pas accepte var x = null Car il n'associe le null à aucun type - pas même Object. En utilisant l'approche ci-dessus, var x = (Object)null "fonctionnerait" bien que son utilité soit discutable.

Généralement, lorsque je ne peux pas utiliser correctement l'inférence de type de var,

  1. Je suis à un endroit où il vaut mieux déclarer la variable explicitement; ou
  2. Je dois réécrire le code de telle sorte qu'une valeur valide (avec un type établi) soit affectée lors de la déclaration.

La deuxième approche peut être effectuée en déplaçant le code dans des méthodes ou des fonctions.

34
user2246674

Le mot clé var dans le principal avantage de C # est d'améliorer la lisibilité, pas la fonctionnalité. Techniquement, les mots-clés var permettent d'autres déverrouillages (par exemple, l'utilisation d'objets anonymes), mais cela semble sortir du cadre de cette question. Chaque variable déclarée avec le mot clé var a un type. Par exemple, vous constaterez que le code suivant génère "String".

var myString = "";
Console.Write(myString.GetType().Name);

De plus, le code ci-dessus est équivalent à:

String myString = "";
Console.Write(myString.GetType().Name);

Le mot clé var est simplement la façon dont C # dit "Je peux trouver le type de myString à partir du contexte, alors ne vous inquiétez pas de spécifier le type."

var myVariable = (MyType)null ou MyType myVariable = null devrait fonctionner car vous donnez le contexte du compilateur C # pour déterminer quel type myVariable devrait être.

Pour plus d'informations:

1
Steven Wexler