Definite Assignment

C# requires definite assignment; that is, variables must be initialized (or assigned to) before they are used. To test this rule, change the line that initializes myInt in Example 5-1 to:

int myInt;

and save the revised program shown in Example 5-2.

Example 5-2. Uninitialized variable

class Values
{
   static void Main( )
   {
      int myInt;
      System.Console.WriteLine 
      ("Uninitialized, myInt: {0}",myInt); 
      myInt = 5;
      System.Console.WriteLine("Assigned, myInt: {0}", myInt);
   }
}

When you try to compile Example 5-2, the C# compiler will display the following error message:

5.2.cs(6,55): error CS0165: Use of unassigned local 
variable 'myInt'

It is not legal to use an uninitialized variable in C#; doing so violates the rule of definite assignment. In this case, “using” the variable myInt means passing it to WriteLine( ).

So does this mean you must initialize every variable? No, but if you don’t initialize your variable then you must assign a value to it before you attempt to use it. Example 5-3 illustrates a corrected program.

Example 5-3. Definite assignment

class Values
{
   static void Main( )
   {
      int myInt;
      //other code here...
      myInt = 7;  // assign to it
      System.Console.WriteLine("Assigned, myInt: {0}", myInt);
      myInt = 5;
      System.Console.WriteLine("Reassigned, myInt: {0}", myInt);
   }
}

Get Learning C# now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.