El objeto C # no es nulo pero (myObject! = Null) todavía devuelve falso

Necesito hacer una comparación entre un objeto y NULL. Cuando el objeto no es NULL, lo lleno con algunos datos.

Aquí está el código:

 if (region != null)
 {
  ....
 }

Esto funciona, pero cuando se realiza un bucle y un bucle en algún momento, el objeto de la región NO es nulo (puedo ver los datos dentro de él en el modo de depuración). Paso a paso, cuando se realiza la depuración, no va dentro de la instrucción IF ... Cuando hago una Observación rápida con las siguientes expresiones: veo que (región == nula) devuelve falso, AND (región! = Nula ) devuelve falso también ...¿porque y como?

Actualizar

Alguien señaló que el objeto estaba == y! = Sobrecargado:

    public static bool operator ==(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }

        return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
    }


    public static bool operator !=(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }
        return (r1.Cmr.CompareTo(r2.Cmr) != 0 || r1.Id != r2.Id);
    }

Respuestas a la pregunta(8)

Su respuesta a la pregunta