Как создать уникальное значение ключа?

У меня есть связь между двумя классами Credentials<=>UserData. И я хотел бы использовать MemoryCache для фильтрации моего входящего запроса.

Мои key = Credential и value = UserData.

(Data)MemoryCache.Default.AddOrGetExisting(GetKey(credential), // must be a string
                                           userData,
                                           DateTime.Now.AddMinutes(5));

Как я могу реализовать public string GetKey(Credentials credential) для входящего запроса?

Credentials его a DataContract, который содержит другие DataContracts, такие как GoogleCredentials, FacebookCredentials. И они содержат свои собственные strings как user_name и password.

Теперь элементы кэша добавляются с помощью ключей credential.ToString(), и важно, чтобы этот метод возвращал одно и то же значение для объектов Credentials, имеющих одинаковые значения учетных данных, и различные значения для экземпляров Credentials с разными значениями учетных данных.

Внутри класса Credential у меня есть следующий метод

public override int GetHashCode()
{
    int hashCode = 0;

    if (GoogleCredentials!= null)
    {
        hashCode ^= GoogleCredentials.GetHashCode();
    }

    if (FacebookCredentials!= null)
    {
        hashCode ^= FacebookCredentials.GetHashCode();
    }

    return hashCode;
}

Ответ 1

Это вопрос об уникальности данных и объектов. В .NET существует механизм для сравнения двух объектов. Он использует Equals и GetHashCode. Существует еще один метод с EqualityComparer, который основан на тех же механизмах.

GetHashCode возвращает уникальный целочисленный код для вашего объекта. Вы можете переопределить этот метод для своего класса учетных данных или создать внешний метод, который будет работать аналогичным образом, а затем вызвать ToString() для уникального кода. Есть многие руководства, как реализовать GetHashCode в правильном направлении. Фактическая реализация зависит от структуры вашего объекта.