测试在ConcurrentQueue中是否已经存在带有ID的元素

本文关键字:ID 元素 存在 ConcurrentQueue 是否 测试 | 更新日期: 2023-09-27 18:19:15

我想测试一下,看看我的ConcurrentQueue中的对象是否已经通过使用ID属性添加。我尝试了以下操作,但没有成功:

ConcurrentQueue<StrippedResponse> responses = new ConcurrentQueue<StrippedResponse>();
// Add elements to the responses object.
if (responses.Contains(e => e.ID == request.ID))
{
  // Do something special
}

我可以找到/定位/测试一个元素是否存在使用ConcurrentQueue?如果是,我该怎么做呢?如果这种能力不可用于ConcurrentQueue,我应该使用什么集合,这是线程安全的,同时添加/排队对象?

测试在ConcurrentQueue中是否已经存在带有ID的元素

如果你只关心存在,那就试试

if(responses.Any(e => e.ID == request.ID))

我将重写Equals方法并使用Any扩展以获得更整洁的外观。

public class StrippedResponse
{
    public int ID { get; set; }
    ...
    public override bool Equals(object obj)
    {
        return ID == ((StrippedResponse)obj).ID;
    }
}

ConcurrentQueue<StrippedResponse> responses = new  ConcurrentQueue<StrippedResponse>();
public void YourMethod()
{
    // Add elements to the responses object.
    if (responses.Any(e => e.Equals(request)))
    {
      // Do something special
    }
}