V3071. The object is returned from inside 'using' block. 'Dispose' will be invoked before exiting method.

The analyzer detected that a function returns an object that is being used in the 'using' statement.

Consider the following example:

public FileStream Foo(string path)
{
  using (FileStream fs = File.Open(path, FileMode.Open))
  {
    return fs;
  }
}

Since the variable was initialized in the using block, method Dispose will be called for this variable before exiting the function. Therefore, it may not be safe to use the object that will be returned by the function.

The Dispose method will be called because the code above will be modified by the compiler into the following code:

public FileStream Foo(string path)
{
  FileStream fs = File.Open(path, FileMode.Open)
  try
  {
    return fs;
  }
  finally
  {
    if (fs != null)
      ((IDisposable)fs).Dispose();
  }
}

The fixed version may look something like this:

public FileStream Foo(string path)
{
  return File.Open(path, FileMode.Open)
}

Bugs Found

Checked Projects
410
Collected Errors
14 111
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →
Accept