Что должен возвращать GetHashCode, если идентификатор объекта равен нулю?

Что из следующего является правильным / лучшим, учитывая, что свойство идентификации может иметь значение null.

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

ИЛИ

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

Обновление 1: Обновлен 2-й вариант.

Обновление 2: Ниже приведены реализации Equals:

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

И идентификатор имеет тип строка .

21
задан Dienekes 22 February 2011 в 02:48
поделиться