如何识别<rateidentifier>类型的唯一字典键,某些成员等于什么?

时间:2016-01-27 14:46:42

标签: c#

我有一个字典_customRates,其中包含RateIdentifier类型的键和类型为customRate的值。类型T如下所示:

public RateIdentifier(int id, 
         string name,
         Currency currency1,
         Currency currency2)

现在,我有一个特定的currency1currency2,我想检查字典中是否存在RateIdentifier这些指定货币,如果是,则返回密钥(如果没有返回一些默认值)。我知道如果存在这样的密钥,那么密钥将具有此特定currency1currency2 这两个密钥货币确保特定密钥的唯一性)。

我发现这很困难,因为虽然我知道如何在我的字典上使用.Where,但它似乎不是一个合适的解决方案,因为我知道我最多只会有一个这样的解决方案因此,每次检查整个字典似乎有些过分,因为这些字典中的一些特别重要。

1 个答案:

答案 0 :(得分:1)

如果不能覆盖GetHashCode()和Equals(),请使用 string script = "<script>window.open('Printouts/DSVQuotation.aspx?QuoteID=" + NewQuoteID.ToString() + "','_blank');</script>"

FirstOrDefault

但是,您可以(并且可能应该)覆盖您的密钥类型上的GetHashCode()和Equals()(如果您还没有)并使它们返回相同货币的相同哈希码。这样,您就可以使用字典的标准工具:

var myStuff = _customRates.FirstOrDefault(x => x.Key.currency1 == myCurrency1 && x.Key.currency2 == myCurrency2);

查找值时,// Assume GetHashCode and Equals are overridden var myStuff = _customRates[new RateIdentifier() { currency1 = myCurrency1, currency2 = myCurrency2 }]; 将首先计算指定键的哈希码(使用Dictionary)并搜索该值。如果GetHashCode中的多个元素具有相同的哈希码,则将调用Dictionary来确定哪个与该键匹配。这意味着,即使您没有在向字典添加值时使用的特定键对象,您仍然可以构造新键。