variable uso asignada c# initialization

Error de C#: uso de variable local no asignada



uso de la variable local no asignada c# int (5)

El compilador no sabe que Environment.Exit () no devuelve. ¿Por qué no simplemente "regresar" desde Main ()?

No estoy seguro de por qué recibo este error, pero ¿no debería compilarse este código, dado que ya estoy verificando si la cola se está inicializando?

public static void Main(String[] args) { Byte maxSize; Queue queue; if(args.Length != 0) { if(Byte.TryParse(args[0], out maxSize)) queue = new Queue(){MaxSize = maxSize}; else Environment.Exit(0); } else { Environment.Exit(0); } for(Byte j = 0; j < queue.MaxSize; j++) queue.Insert(j); for(Byte j = 0; j < queue.MaxSize; j++) Console.WriteLine(queue.Remove()); }

Entonces, si la cola no se inicializa, entonces los bucles for no son accesibles, ¿verdad? Dado que el programa ya termina con Environment.Exit (0)?

Espero que puedas darme algunos consejos :)

Gracias.


El compilador solo sabe que el código es o no alcanzable si usa "return". Piense en Environment.Exit () como una función a la que llama, y ​​el compilador no sabe que cerrará la aplicación.


Un par de formas diferentes de resolver el problema:

Simplemente reemplace Environment.Exit con return. El compilador sabe que la devolución finaliza el método, pero no sabe que Environment.Exit lo hace.

static void Main(string[] args) { if(args.Length != 0) { if(Byte.TryParse(args[0], out maxSize)) queue = new Queue(){MaxSize = maxSize}; else return; } else { return; }

Por supuesto, realmente solo puede salirse con la suya porque está usando 0 como su código de salida en todos los casos. Realmente, deberías devolver un int en lugar de usar Environment.Exit. Para este caso particular, este sería mi método preferido

static int Main(string[] args) { if(args.Length != 0) { if(Byte.TryParse(args[0], out maxSize)) queue = new Queue(){MaxSize = maxSize}; else return 1; } else { return 2; } }

Inicializa la cola para anular, que en realidad es solo un truco de compilación que dice: "Descubriré mis propias variables no inicializadas, muchas gracias". Es un truco útil, pero no me gusta en este caso: tienes demasiadas ramas para verificar fácilmente que lo estás haciendo correctamente. Si realmente quisieras hacerlo de esta manera, algo como esto sería más claro:

static void Main(string[] args) { Byte maxSize; Queue queue = null; if(args.Length == 0 || !Byte.TryParse(args[0], out maxSize)) { Environment.Exit(0); } queue = new Queue(){MaxSize = maxSize}; for(Byte j = 0; j < queue.MaxSize; j++) queue.Insert(j); for(Byte j = 0; j < queue.MaxSize; j++) Console.WriteLine(queue.Remove()); }

Agregue una declaración de devolución después de Environment.Exit. De nuevo, esto es más un truco de compilación, pero es un poco más legítimo IMO porque también agrega semántica para los humanos (aunque te mantendrá alejado de esa cacareada cobertura de código del 100%)

static void Main(String[] args) { if(args.Length != 0) { if(Byte.TryParse(args[0], out maxSize)) { queue = new Queue(){MaxSize = maxSize}; } else { Environment.Exit(0); return; } } else { Environment.Exit(0); return; } for(Byte j = 0; j < queue.MaxSize; j++) queue.Insert(j); for(Byte j = 0; j < queue.MaxSize; j++) Console.WriteLine(queue.Remove()); }


El compilador no sabe que Environment.Exit () terminará el programa; simplemente lo ve ejecutando un método estático en una clase. Simplemente inicialice la queue para anular cuando la declare.

Queue queue = null;


SqlConnection con; SqlCommand com; con = new SqlConnection ("Data Source =. / SQLEXPRESS; AttachDbFilename =" + Server.MapPath ("~ / App_Data / Database.mdf") + "; Seguridad integrada = Verdadero; Instancia de usuario = Verdadero"); con.Open ();

com = new SqlCommand("insert into blog values(@b)", con); //com.Parameters.AddWithValue("@a", TextBox1.Text); com.Parameters.AddWithValue("@b",TextBox2.Text); com.ExecuteNonQuery(); con.Close(); TextBox1.Visible = true; SqlDataReader DR1; while (DR1.Read()) { TextBox1.Text = DR1[1].ToString(); }

el error viene de usar variables locales no asignadas.