﻿# 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:

```cpp
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:

```cpp
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:

```cpp
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':

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

    return obj == this;
}
```