是否可以使用List <t> .Contains(...)?</t>

时间:2013-06-06 22:00:20

标签: c# .net

我正在尝试创建一个包含对象列表的通用缓存类,并且将公开一个方法,该方法可以根据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',因为它不是委托类型

我如何实现目标?

2 个答案:

答案 0 :(得分:19)

您可以使用Linq:

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

List.Exists

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

答案 1 :(得分:4)

使用LINQ函数Any代替Contains。对于List<T>Contains方法定义为T