variable tipo initialize inicializar implicitly implicita declarar c# initialization

c# - tipo - Cómo inicializar var?



initialize implicit variable c# (11)

¿Puedo inicializar var con nulo o algún valor vacío?


¿Por qué no sería esto posible?

var theNameOfTheVar = (TheType)null;

p.ej:

var name = (string)null;

Simple como eso.


Bueno, como otros han declarado, la ambigüedad en el tipo es el problema. Entonces, la respuesta es no, C # no permite que eso ocurra porque es un lenguaje fuertemente tipado, y se trata solo de tipos conocidos de tiempo de compilación. El compilador podría haberse diseñado para inferirlo a partir de un object tipo, pero los diseñadores optaron por evitar la complejidad adicional (en C # null no tiene ningún tipo).

Una alternativa es

var foo = new { }; //anonymous type

Nuevamente, tenga en cuenta que está inicializando a un tipo conocido de compilación, y al final no es un objeto null , sino anónimo. Son solo unas pocas líneas más cortas que el new object() . Solo puede reasignar el tipo anónimo a foo en este caso, que puede o no ser deseable .

Inicializar a null con el tipo desconocido no está fuera de discusión.

A menos que estés usando dynamic .

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

Por supuesto, es bastante inútil, a menos que quieras reasignar valores a la variable foo . También pierdes soporte de intellisense en Visual Studio.

Por último, como otros han respondido, puede tener un tipo específico declarado mediante conversión;

var foo = (T)null;

Entonces tus opciones son:

//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;


Bueno, creo que puedes asignarlo a un nuevo objeto. Algo como:

var v = new object();


C # es un lenguaje estrictamente / fuertemente tipado . var se introdujo para el tipo de enlace de tiempo de compilación para tipos anónimos pero puede usar var para tipos primitivos y personalizados que ya se conocen en el momento del diseño. En el tiempo de ejecución no hay nada como var, se reemplaza por un tipo real que sea un tipo de referencia o un tipo de valor.

Cuando tu dices,

var x = null;

el compilador no puede resolver esto porque no hay ningún tipo vinculado a nulo. Puedes hacerlo así.

string y = null; var x = y;

Esto funcionará porque ahora x puede saber su tipo en tiempo de compilación que es cadena en este caso.


Esta es la manera de cómo inicializar el valor de variable var

var _myVal = (dynamic)null;


Gracias Mr.Snake, Encontré este útil para otro truco que estaba buscando :) (No hay suficiente representante para comentar)

Taquigrafía de tipos anulables. Me gusta esto:

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


Nop. var necesita inicializarse a un tipo, no puede ser nulo.


Una var no se puede establecer en null ya que debe estar tipada estáticamente.

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

Sin embargo, puede usar esta construcción para solucionar el problema:

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

No lo sé con certeza, pero por lo que escuché, también puedes usar dynamic lugar de var . Esto no requiere tipeo estático.

dynamic foo = null; foo = "hi";

Además, dado que no estaba claro para mí de la pregunta, si se refería a la palabra clave var o variables en general: solo las referencias (a las clases) y los tipos que aceptan valores nulos pueden establecerse en nulo. Por ejemplo, puedes hacer esto:

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

Pero no puedes hacer esto:

int i = null; // integers cannot contain null


no puedes asignar null a un tipo var.

Si asigna null, el compilador no puede encontrar la variable que quería en var lugar.

throws error: Cannot assign <null> to an implicitly-typed local variable

puedes probar esto:

var dummy =(string)null;

Aquí el compilador puede encontrar el tipo que desee, así que no hay problema

Puede asignar algunos valores vacíos.

var dummy = string.Empty;

o

var dummy = 0;


no se puede inicializar var con nulo, var debe inicializarse como un tipo, de lo contrario no se puede inferir; si crees que debes hacerlo, quizás puedas publicar el código, es probable que exista otra forma de hacer lo que eres intentando.


var solo le dice al compilador que infiera el tipo que quería en el momento de la compilación ... no puede inferir a partir de un null (aunque hay casos en que podría hacerlo).

Entonces, no, no tienes permitido hacer esto.

Cuando dices "algún valor vacío" ... si te refieres a:

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

Entonces sí, puedes hacer eso, pero no es null .