Comment initialiser var?

Puis-je initialiser var avec une valeur nulle ou vide?

C # est un langage ssortingctement typé . var a été introduit pour la liaison de type comstack-time pour les types anonymes, mais vous pouvez utiliser var pour les types primitifs et personnalisés déjà connus au moment de la conception. À l’exécution, il n’y a rien de tel que var, il est remplacé par un type réel qui est soit un type de référence, soit un type de valeur.

Quand tu dis,

 var x = null; 

le compilateur ne peut pas résoudre ce problème car il n’existe aucun type lié à null. Vous pouvez le faire comme ça.

 ssortingng y = null; var x = y; 

Cela fonctionnera car maintenant x peut connaître son type au moment de la compilation qui est une chaîne dans ce cas.

Pourquoi cela ne serait-il pas possible?

 var theNameOfTheVar = (TheType)null; 

par exemple:

 var name = (ssortingng)null; 

Aussi simple que cela.

Eh bien, comme d’autres l’ont dit, l’ambiguïté dans le type est le problème. Donc, la réponse est non, C # ne permet pas que cela se produise car c’est un langage fortement typé, et il ne traite que des types connus de compilation. Le compilateur aurait pu être conçu pour l’inférer comme object de type, mais les concepteurs ont choisi d’éviter la complexité supplémentaire (en C #, null n’a pas de type).

Une alternative est

 var foo = new { }; //anonymous type 

Notez à nouveau que vous initialisez à un type connu de compilation, et à la fin son object non null , mais anonyme. Ce ne sont que quelques lignes plus courtes qu’un new object() . Vous ne pouvez réaffecter le type anonyme à foo dans ce seul cas, ce qui peut être souhaitable ou non .

L’initialisation à null avec le type non connu est hors de question.

Sauf si vous utilisez la dynamic .

 dynamic foo = null; //or var foo = (dynamic)null; //overkill 

Bien sûr, cela ne sert à rien, sauf si vous voulez réaffecter des valeurs à foo variable. Vous perdez également le support intellisense dans Visual Studio.

Enfin, comme d’autres ont répondu, vous pouvez avoir un type spécifique déclaré par casting;

 var foo = (T)null; 

Vos options sont donc les suivantes:

 //initializes to non-null; I like it; cant be reassigned a value of any type var foo = new { }; //initializes to non-null; can be reassigned a value of any type var foo = new object(); //initializes to null; dangerous and finds least use; can be reassigned a value of any type dynamic foo = null; var foo = (dynamic)null; //initializes to null; more conventional; can be reassigned a value of any type object foo = null; //initializes to null; cannot be reassigned a value of any type var foo = (T)null; 

C’est la manière d’ initialiser la valeur à la variable var

 var _myVal = (dynamic)null; 

Une var ne peut pas être définie sur null car elle doit être saisie de manière statique.

 var foo = null; // comstackr goes: "Huh, what's that type of foo?" 

Cependant, vous pouvez utiliser cette construction pour contourner le problème:

 var foo = (ssortingng)null; // comstackr goes: "Ah, it's a ssortingng. Nice." 

Je ne sais pas avec certitude, mais d’après ce que j’ai entendu, vous pouvez également utiliser la dynamic au lieu de la var . Cela ne nécessite pas de typage statique.

 dynamic foo = null; foo = "hi"; 

De plus, comme la question ne m’apparaissait pas clairement si vous vouliez parler du ou des variables var en général: Seules les références (aux classes) et aux types NULL peuvent être définies sur null. Par exemple, vous pouvez le faire:

 ssortingng s = null; // reference SomeClass c = null; // reference int? i = null; // nullable 

Mais tu ne peux pas faire ça:

 int i = null; // integers cannot contain null 

Eh bien, je pense que vous pouvez l’assigner à un nouvel object. Quelque chose comme:

 var v = new object(); 

var dit simplement au compilateur d’inférer le type que vous vouliez au moment de la compilation … il ne peut pas déduire de null (bien qu’il y ait des cas possibles ).

Donc, non, vous n’êtes pas autorisé à le faire.

Quand vous dites “une valeur vide” … si vous voulez dire:

 var s = ssortingng.Empty; // var s = ""; 

Alors oui, vous pouvez le faire, mais pas null .

Nan. var doit être initialisé à un type, il ne peut pas être nul.

vous ne pouvez pas affecter NULL à un type var.

Si vous atsortingbuez la valeur null, le compilateur ne peut pas trouver la variable que vous voulez dans la variable var.

erreur génère: Cannot assign to an implicitly-typed local variable

vous pouvez essayer ceci:

 var dummy =(ssortingng)null; 

Ici le compilateur peut trouver le type que vous voulez donc pas de problème

Vous pouvez atsortingbuer des valeurs vides.

 var dummy = ssortingng.Empty; 

ou

 var dummy = 0; 

vous ne pouvez pas initialiser var avec null, var doit être initialisé en tant que type, sinon il ne peut pas être déduit, si vous pensez que vous devez le faire, vous pouvez peut-être poster le code il est probable qu’il existe une autre façon de faire ce que vous êtes en essayant.

Merci Mr.Snake, J’ai trouvé cette aide pour un autre tour que je cherchais 🙂 (Pas assez de rep pour commenter)

Affectation abrégée de types nullables. Comme ça:

 var someDate = !Convert.IsDBNull(dataRow["SomeDate"]) ? Convert.ToDateTime(dataRow["SomeDate"]) : (DateTime?) null;