Error del compilador CS0165
Actualización: Julio de 2008
Mensaje de error
Uso de la variable local no asignada 'nombre'
Use of unassigned local variable 'name'
El compilador de C# no permite el uso de variables no inicializadas. Si el compilador detecta el uso de una variable que pueda no haberse inicializado, genera el error CS0165. Para obtener más información, vea Campos (Guía de programación de C#). Tenga en cuenta que este error se genera cuando el compilador encuentra una construcción que podría dar como resultado el uso de una variable no asignada, incluso en el caso de que su código determinado no la utilice. Esto evita tener que utilizar reglas demasiado complejas para la asignación definitiva.
Si aparece este error
Para obtener más información, vea https://blogs.msdn.com/ericlippert/archive/2006/08/18/706398.aspx.
Ejemplo
El código siguiente genera el error CS0165:
// CS0165.cs
using System;
class MyClass
{
public int i;
}
class MyClass2
{
public static void Main(string [] args)
{
int i, j;
if (args[0] == "test")
{
i = 0;
}
/*
// to resolve, either initialize the variables when declared
// or provide for logic to initialize them, as follows:
else
{
i = 1;
}
*/
j = i; // CS0165, i might be uninitialized
MyClass myClass;
myClass.i = 0; // CS0165
// use new as follows
// MyClass myClass = new MyClass();
// myClass.i = 0;
}
}
El código siguiente produce el error CS0165 en Visual Studio 2008, pero no en Visual Studio 2005:
//cs0165_2.cs
class Program
{
public static int Main()
{
int i1, i2, i3, i4, i5;
// this is an error, because 'as' is an operator
// that is not permitted in a constant expression.
if (null as object == null)
i1 = 1;
// this is an error, because 'is' is an operator that
// is not permitted in a constant expression.
// warning CS0184: The given expression is never of the provided ('object') type
if (!(null is object))
i2 = 1;
// this is an error, because a variable j3 is not
// permitted in a constant expression.
int j3 = 0;
if ((0 == j3 * 0) && (0 == 0 * j3))
i3 = 1;
// this is an error, because a variable j4 is not
// permitted in a constant expression.
int j4 = 0;
if ((0 == (j4 & 0)) && (0 == (0 & j4)))
i4 = 1;
// this might be an error, because a variable j5 is not
// permitted in a constant expression.
// warning CS1718: Comparison made to same variable; did you mean to compare something else?
int? j5 = 1;
if (j5 == j5)
i5 = 1;
System.Console.WriteLine("{0}{1}{2}{3}{4}{5}", i1, i2, i3, i4, i5); //CS0165
return 1;
}
}
Este error se produce en definiciones de delegados recursivas y puede evitarse mediante la definición del delegado en dos instrucciones:
class Program
{
delegate void Del();
static void Main(string[] args)
{
Del d = delegate() { System.Console.WriteLine(d); }; //CS0165
// Try this instead:
// Del d = null;
//d = delegate() { System.Console.WriteLine(d); };
d();
}
}
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Julio de 2008 |
Se ha agregado texto y un ejemplo de código para los delegados recursivos. |
Corrección de errores de contenido. |