考虑以下私有成员:
private ConcurrentDictionary<CollectionInfo, ServiceInfo> _collectionsServicesMapping;
CollectionInfo
类覆盖并添加了一些附加属性:
class CollectionInfo
{
public Guid InstanceId { get; set; }
public string CollectionName { get; set; }
public string WorkFlowName { get; set; }
public Guid DomainId { get; set; }
public override bool Equals(object obj)
{
return obj is CollectionInfo && (obj as CollectionInfo).InstanceId.Equals(InstanceId);
}
public override int GetHashCode()
{
return InstanceId.GetHashCode();
}
}
在我需要的情境下,我正在通过InstanceId查找CollectionInfo:
private IRequestHandler GetServiceByInstanceId(Guid instanceId)
{
}
我看到两个可选方案:
_collectionsServicesMapping.TryGetValue(new CollectionInfo() { InstanceId = instanceId }, out si)
_collectionsServicesMapping.FirstOrDefault(x => x.Key.InstanceId.Equals(instanceId));
但这迫使我要么创建一个冗余的虚假实例,要么扫描整个字典。是否有一种更有效的方法来基于具有相同哈希码的另一个对象获取字典项?
ConcurrentDictionary<Guid, ServiceInfo>
呢?没有必要将CollectionInfo
作为键。 - MagnusCollectionInfo
和ServiceInfo
。只是想知道是否有一种方法可以保存额外的字典并管理它们之间的并发性。 - Yosi Dahari