Qu'est-ce que GetHashCode devrait renvoyer lorsque l'identifiant de l'objet est nul?

Lequel des énoncés suivants est correct/mieux en considérant que l'identité de la propriété pourrait être null.

public override int GetHashCode()
{
    if (ID == null) {
        return base.GetHashCode();
    }
    return ID.GetHashCode();
}

OU

public override int GetHashCode()
{
    if (ID != null) {
        return ID.GetHashCode();
    }
     return 0;
}

Mise à jour 1: mise à Jour de la 2e option.

Mise à jour 2: ci-Dessous sont les Égaux des implémentations:

public bool Equals(IContract other)
{
    if (other == null)
        return false;
    if (this.ID.Equals(other.ID)) {
        return true;
    }
    return false;
}

public override bool Equals(object obj)
{
    if (obj == null)
        return base.Equals(obj);
    if (!obj is IContract) {
        throw new InvalidCastException("The 'obj' argument is not an IContract object.");
    } else {
        return Equals((IContract)obj);
    }
}

Et l'ID est de string type.

source d'informationauteur Dienekes