如何创建唯一的键值?

时间:2015-12-25 16:49:43

标签: c#

我有两个班级Credentials<=>UserData之间的关系。我想使用MemoryCache来过滤我的传入请求。

我的key = Credentialvalue = UserData

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

如何为传入请求实施public string GetKey(Credentials credential)

CredentialsDataContract包含其他DataContracts,如GoogleCredentialsFacebookCredentials。它们包含自己的strings user_namepassword

现在缓存项添加了键credential.ToString(),此方法为具有相同凭据值的Credentials个对象返回相同的值,并为Credentials提供不同的值具有不同凭据值的实例。

Inside Credential类我有以下方法

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

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

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

    return hashCode;
}

1 个答案:

答案 0 :(得分:3)

这是关于数据和对象唯一性的问题。在.NET中,有一种比较两个对象的机制。它使用EqualsGetHashCode方法。还有另一种基于相同机制的EqualityComparer方法。

GetHashCode为您的对象返回唯一的整数代码。您可以为凭证类覆盖此方法,也可以创建类似的外部方法,然后调用ToString()以获取唯一代码。有many guides如何实现GetHashCode in a right way。实际实现将取决于您的对象结构。