我有两个班级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
其DataContract
包含其他DataContracts
,如GoogleCredentials
,FacebookCredentials
。它们包含自己的strings
user_name
和password
。
现在缓存项添加了键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;
}
答案 0 :(得分:3)
这是关于数据和对象唯一性的问题。在.NET中,有一种比较两个对象的机制。它使用Equals和GetHashCode方法。还有另一种基于相同机制的EqualityComparer方法。
GetHashCode为您的对象返回唯一的整数代码。您可以为凭证类覆盖此方法,也可以创建类似的外部方法,然后调用ToString()以获取唯一代码。有many guides如何实现GetHashCode in a right way。实际实现将取决于您的对象结构。