Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Use of unassigned local variable 'name'
The C# compiler does not allow the use of uninitialized variables. If the compiler detects the use of a variable that might not have been initialized, it generates CS0165. For more information, see Fields (C# Programming Guide). Note that this error is generated when the compiler encounters a construct that might result in the use of an unassigned variable, even if your particular code does not. This avoids the necessity of overly-complex rules for definite assignment.
For more information, see https://blogs.msdn.com/ericlippert/archive/2006/08/18/706398.aspx.
Example
The following sample generates 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;
}
}
The following code produces CS0165 in Visual Studio 2008 but not in 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;
}
}
This error occurs in recursive delegate definitions and can be avoided by defining the delegate in two statements:
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();
}
}
Change History
Date |
History |
Reason |
---|---|---|
July 2008 |
Added text and code example for recursive delegates. |
Content bug fix. |