8

我正在尝试创建一个通用缓存类,它将保存一个对象列表,
并将公开一个方法,该方法可以检查对象的实例是否已基于 Id 属性进行缓存:

public class CacheService<T> where T : BaseModel
{
    private List<T> _data = new List<T>();

    public void Check(T obj)
    {
        if (_data.Contains(r => r.Id.Equals(obj.Id))
        {
            //Do something
        }
    }
}

public class BaseModel 
{
    public int Id { get; set; }
}

我在Contains()命令上收到编译器错误,说:

无法将 lambda 表达式转换为类型“T”,因为它不是委托类型

我怎样才能实现我的目标?

4

2 回答 2

21

您可以使用 Linq:

bool contains = _data.Any(r => r.Id.Equals(obj.Id));

List.Exists

bool contains = _data.Exists(r => r.Id.Equals(obj.Id));
于 2013-06-06T22:02:21.387 回答
4

使用 LINQ 函数Any而不是Contains. 对于List<T>,该Contains方法被定义为采用T.

于 2013-06-06T22:03:19.703 回答