# 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;
    }

This diagnostic is classified as:

CWE-684

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