Comment initialiser var?

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

47
demandé sur nawfal 2010-05-25 16:47:56

11 réponses

C # est un langage strictement / fortement typé . var a été introduit pour la liaison de type à la compilation pour les types anonymes mais vous pouvez utiliser var pour les types primitifs et personnalisés déjà connus au moment de la conception. Au moment de l'exécution, il n'y a rien comme var, il est remplacé par un type réel qui est soit un type de référence ou un type de valeur.

Quand vous dites,

var x = null; 

Le compilateur ne peut pas résoudre cela car il n'y a pas de type lié à null. Vous pouvez le faire comme ce.

string y = null;
var x = y;

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

46
répondu this. __curious_geek 2017-04-02 13:47:03

Pourquoi cela ne serait-il pas possible?

var theNameOfTheVar = (TheType)null;

Par exemple:

var name = (string)null;

Aussi Simple que ça.

29
répondu Snake 2010-05-25 12:51:32

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 laisse pas cela se produire parce que c'est un langage fortement typé, et il ne traite que des types connus au moment de la compilation. Le compilateur aurait pu être conçu pour le déduire de type object, 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 au moment de la compilation, et à la fin ce n'est pas le cas null, mais objet anonyme. C'est seulement quelques lignes plus courtes que new object(). Vous pouvez seulement réaffecter le type anonyme à foo dans ce cas, ce qui peut ou non être souhaitable .

L'initialisation à null avec le type n'étant pas connu est hors de question.

, Sauf si vous utilisez dynamic.

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

Bien sûr, c'est assez inutile, sauf si vous voulez réaffecter des valeurs à la variable foo. 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;

Donc, vos options sont:

//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;
28
répondu nawfal 2014-01-16 10:55:26

C'est la façon de initialiser la valeur de à var variable

var _myVal = (dynamic)null; 
8
répondu Anjan Kant 2016-08-09 08:33:15

Un var ne peut pas être définie sur null, car il doit être typé statiquement.

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

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

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

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

dynamic foo = null;
foo = "hi";

Aussi, comme il n'était pas clair pour moi de la question si vous vouliez dire le mot-clé varou les variables en général: seules les références (aux classes) et les types nullables peuvent être définies sur null. Par exemple, vous pouvez faire ceci:

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

, Mais vous ne pouvez pas faire ceci:

int i = null; // integers cannot contain null
5
répondu mafu 2010-05-25 12:54:41

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

var v = new object();
4
répondu Hassanation 2013-11-11 19:52:40

var dit simplement au compilateur de déduire le type que vous vouliez à la compilation time...it impossible de déduire de null (bien qu'il y ait des cas où pourrait).

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

Quand vous dites "une valeur vide"...si vous voulez dire:

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

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

3
répondu Nick Craver 2010-05-25 12:50:13

Non. var doit être initialisé à un type, il ne peut pas être null.

3
répondu Jason Evans 2011-09-27 14:37:31

Vous ne pouvez pas attribuer null à un type var.

Si vous attribuez null, le compilateur ne peut pas trouver la variable souhaitée dans var place.

Lance l'erreur: Cannot assign <null> to an implicitly-typed local variable

, Vous pouvez essayer ceci:

var dummy =(string)null;

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

, Vous pouvez attribuer des valeurs vides.

var dummy = string.Empty;

Ou

var dummy = 0;
2
répondu anishMarokey 2010-05-25 12:56:37

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 peut-être que vous pouvez poster le code, il est probable qu'il existe une autre façon de faire ce que vous essayez.

0
répondu Pharabus 2010-05-25 12:51:41

Merci M. Snake, trouvé ce utile pour un autre truc que je cherchais:) (pas assez de représentants pour commenter)

Attribution abrégée des types nullables. Comme ceci:

var someDate = !Convert.IsDBNull(dataRow["SomeDate"])
                    ? Convert.ToDateTime(dataRow["SomeDate"])
                    : (DateTime?) null;
0
répondu Samynix 2014-08-06 08:41:42