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?
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
,
La deuxième approche peut être effectuée en déplaçant le code dans des méthodes ou des fonctions.
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: