Oi amigo,
Criei um projeto aqui no meu visual studio um projeto com os códigos que me passou, tive que comentar algumas linhas pois não possuo algumas classes referenciadas no seu código.
Então fiz a chamada do seu método Equals passando um object com DBNull.Value atribuído, e consegui simular o mesmo erro que você tomou.
Você tem toda razão no post anterior, DBNull é diferente de null. Foi desatenção minha...
Através do DBNull.Value você consegue saber se o banco de dados retornou um valor nulo, ou seja, quando o dado requisitado está ausente no banco de dados. Muitas colunas em banco de dados permitem valores nulos.
Isso não deveria ocorrer com campos importantes como CPF e RG, se você é o administrador do BD, sugiro tornar estes campos obrigatórios na tabela e no formulário de cadastro do cliente, se houver.
Corrigindo a minha sugestão de solução anterior, tente fazer o seguinte:
public override bool Equals(object obj)
{
if (obj != DBNull.Value)
{
Cliente cliente = (Cliente)obj;
return this.rg.Equals(cliente.rg) && this.cpf.Equals(cliente.cpf);
}
else
{
return false;
}
}