C#字典包含按对象属性查找的值

C#字典包含按对象属性查找的值,c#,.net,collections,dictionary,C#,.net,Collections,Dictionary,我有字典邮资编码 当我向该词典添加新元素时,我想查找该词典,如果位置.PostalCode不在此词典中,我想插入它。否则我想跳过它。因此,需要知道PostalCode是否已经在集合中。我不能把它当作钥匙 如何做到这一点 谢谢。您可以试试: if(PostalCodes.Values.All(l=>l.PostalCode != location.PostalCode)) { PostalCodes.Add(key /*what is it*/, location); } 但是,如

我有
字典邮资编码

当我向该词典添加新元素时,我想查找该词典,如果
位置.PostalCode
不在此词典中,我想插入它。否则我想跳过它。因此,需要知道PostalCode是否已经在集合中。我不能把它当作钥匙

如何做到这一点

谢谢。

您可以试试:

if(PostalCodes.Values.All(l=>l.PostalCode != location.PostalCode))
{
    PostalCodes.Add(key /*what is it*/, location);
}

但是,如果数据量很大,这可能会变得很慢。

听起来你需要另一本字典,它确实使用它作为键-基本上是一个双向映射。至少,如果你想让它表现好的话。您可以只查看映射中的每个值,但这将是一个O(n)操作


(或者,如果您只做了一次,只需为您正在使用的所有位置创建一个
哈希集
。实际上,您并不需要
长的
,通过它的发音进行反向查找。)

那么,您的字典名为
PostalCodes
?长键代表什么?位置中有哪些数据?通常,如果您想将某个项添加到字典中,而该项在某个特定值上还不存在,则可以使用该值作为键:
PostalCodes[postalCode]=location
Long表示外部位置ID,它是一个指针,用于将IP映射到位置。所以我必须使用它。此外,我不能真正使用邮政编码作为Dict的键值。因为,我已经看到邮政编码在位置上不是唯一的。至少这是providers文件显示的内容,但是反向查找不必使用long,这就是我的意思。将编辑。