V3108. It is not recommended to return null or throw exceptions from 'ToString()' method.


The analyzer detected that an overridden 'ToString()' method returns 'null' or throws an exception.

Consider the following example:

public override string ToString()
{
  return null;
}

It is very likely that this method will be called to get a string representation of an instance at runtime or during debugging. Since the programmer is not likely to test the function’s return result for 'null', using it may lead to throwing 'NullReferenceException'. If you need to return an empty or unknown value of an instance’s string representation, return an empty string:

public override string ToString()
{
  return string.Empty;
}

Another example of poor implementations of the 'ToString()' method is when it throws exceptions:

public override string ToString()
{
  if(hasError)
    throw new Exception();
  ....
} 

It is very likely that this method will be called by the user of the class at a point where exceptions are not expected to be thrown and handled, for example in a destructor.

If you want the method to issue an error message when generating an object’s string representation, return its text as a string or log the error in some way:

public override string ToString()
{
  if(hasError)
  {
    LogError();
    return "Error encountered";
  }
  ....
}

According to Common Weakness Enumeration, potential errors found by using this diagnostic are classified as CWE-684.

You can look at examples of errors detected by the V3108 diagnostic.


Bugs Found

Checked Projects
344
Collected Errors
12 970