V3115. It is not recommended to throw exceptions from 'Equals(object obj)' method.


The analyzer detected that overridden method 'Equals(object obj)' might throw an exception.

Consider the following example:

public override bool Equals(object obj)
{
  return obj.GetType() == this.GetType();
} 

If the 'obj' argument is null, a 'NullReferenceException' will be thrown. The programmer must have forgotten about this scenario when implementing the method. Use a null check to make this code work properly:

public override bool Equals(object obj)
{
  if (obj == null)
    return false;

  return obj.GetType() == this.GetType();
} 

Another poor practice when implementing the 'Equals(object obj)' method is to explicitly throw an exception from it. For example:

public override bool Equals(object obj)
{
    if (obj == null)
        throw new InvalidOperationException("Invalid argument.");

    return obj == this;
}

This method is very likely to be called in such a block of code where exception throwing and handling are not expected.

If one of the objects does not meet the conditions, return 'false':

public override bool Equals(object obj)
{
    if (obj == null)
        return false;

    return obj == this;
}

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 V3115 diagnostic.


Do you make errors in the code?

Check your code
with PVS-Studio

Static code analysis
for C, C++, and C#

goto PVS-Studio;
We use cookies for the analysis of events to improve our content and make user interaction more convenient. By continuing the view of our web-pages you accept the terms of using these files. You can find out more about cookie-files and privacy policy or close the notification, by clicking on the button. Learn More →
Do not show