Stuck in function and booleans

2020-05-10 02:04发布

问题:

I have function called firstRun(), inside of it I have two defined booleans filesDeleted and dirsDeleted.

Also inside in function I have if (filesDeleted == true && dirsDeleted == true) {
When I try to debug application I get error - Use of unassigned local variable 'filesDeleted' and Use of unassigned local variable 'dirsDeleted' tried a lot of different solutions, did not work at all.

Here's the code:

private void firstRun(bool forceDelete) {
  string Path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myLauncher");
  string[] Files = Directory.GetFiles(Path);
  string[] Dirs = Directory.GetDirectories(Path);
  bool filesDeleted; 
  bool dirsDeleted;

  if (forceDelete == true)
  {
      if (Directory.Exists(Path))
      {
          string lastFile = Files[Files.Length - 1];
          foreach (string file in Files)
          {
              if (file == lastFile)
              {
                  filesDeleted = true;
                  MessageBox.Show("test");
              }
              File.Delete(file);
          }
          string lastDir = Dirs[Dirs.Length - 1];
          foreach (string dir in Dirs)
          {
              if (dir == lastDir)
              {
                  dirsDeleted = true;
                  MessageBox.Show("test2");
              }
              Directory.Delete(dir, true);

          }
          if (filesDeleted == true && dirsDeleted == true)
          {
            //code when everything deleted
          }
      }
      else
      {
          Directory.CreateDirectory(Path);
      }
  }

回答1:

Change your

bool filesDeleted;
bool dirsDeleted;

to

bool filesDeleted = false;
bool dirsDeleted = false;

These are local variables and they must be assinged before use them.

From 5.1.7 Local variables

A local variable is not automatically initialized and thus has no default value. For the purpose of definite assignment checking, a local variable is considered initially unassigned.



回答2:

Unlike class member variables, local variables in methods do not have a default value, and must be definitely assigned before you try and read from them:

so you need to use

bool fileDeleted = false;
bool dirsDeleted = false;

instead of

bool filesDeleted;
bool dirsDeleted;