相互隐藏的通用类型

时间:2016-02-04 17:03:25

标签: c# generics

给出接口:

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

0 个答案:

没有答案