c# - 是否可以使用 List<T>.Contains(...)?

标签 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() 命令上遇到编译器错误,说:

Cannot convert lambda expression to type 'T' because it is not a delegate type

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

最佳答案

您可以使用 Linq:

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

List.Exists :

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

关于c# - 是否可以使用 List<T>.Contains(...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16972939/

相关文章:

c# - 如何从我的 SOAP 响应中删除额外的结果标记

c# - List<T>.ForEach() 方法消失了吗?

c# - 可以等待 XamlReader.LoadAsync() 吗?

c# - 如何迭代这种特定类型的 Dictionary<int, Result>?

c# - 以编程方式创建 Windows 用户 c# .net(使用 PricinpalUser/CreateProfile)

c# - 我们能否仅使用 SILVERLIGHT 和 XML(无 WCF WPF CONSOL 应用程序)创建 Silverlight 套接字服务器?

c# - 如何在 OpenTK .NET Core 中设置 OpenGL API 版本?

c# - 可自动升级的 WCF 服务

.net - 在 .Net 中,如何使用智能感知提示来装饰类?

c# - 在 .NET 4 中使用 IntPtr 时出现 PInvokeStackImbalance 异常? (适用于 .NET 3.5)