我正在尝试创建一个包含对象列表的通用缓存类,并且将公开一个方法,该方法可以根据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',因为它不是委托类型
我如何实现目标?
答案 0 :(得分:19)
您可以使用Linq:
bool contains = _data.Any(r => r.Id.Equals(obj.Id));
bool contains = _data.Exists(r => r.Id.Equals(obj.Id));
答案 1 :(得分:4)
使用LINQ函数Any
代替Contains
。对于List<T>
,Contains
方法定义为T
。