给出接口:
public interface IStorable<TPk>
{
TPk ID { get; set; }
...
}
和
public interface ICacheHolder<TCached,TPk> where TCached : IStorable<TPk>
{
...
TCached GetValueByID(TPk id);
...
}
具体实施:
public class BasicCacheHolder<TCached, TPk>: ICacheHolder<TCached, TPk> where TCached : IStorable<TPk>
{
...
public TCached GetValueByID(TPk id)
{
return CacheEntries.SingleOrDefault(ce => ce.Value.ID == id);
}
}
我得到的错误是“运算符'=='不能应用于'TPk'和'TPk'类型的操作数,不能将运算符'=='应用于'TPk'和'TPk'类型的操作数”< / p>
我认为这是因为其中一个TPk泛型类型隐藏了对其他TPk的引用,但是尝试重命名它们似乎会破坏我的代码。
如何解决此问题?
修改
CachedEntry是以下非常简单的类:
public class CacheEntry<T>
{
public T Value { get; set; }
public DateTime RetrievedAt { get; set; }
}