我有一个字典_customRates
,其中包含RateIdentifier
类型的键和类型为customRate
的值。类型T
如下所示:
public RateIdentifier(int id,
string name,
Currency currency1,
Currency currency2)
现在,我有一个特定的currency1
和currency2
,我想检查字典中是否存在RateIdentifier
这些指定货币,如果是,则返回密钥(如果没有返回一些默认值)。我知道如果存在这样的密钥,那么仅密钥将具有此特定currency1
和currency2
( 即这两个密钥货币确保特定密钥的唯一性)。
我发现这很困难,因为虽然我知道如何在我的字典上使用.Where
,但它似乎不是一个合适的解决方案,因为我知道我最多只会有一个这样的解决方案因此,每次检查整个字典似乎有些过分,因为这些字典中的一些特别重要。
答案 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
来确定哪个与该键匹配。这意味着,即使您没有在向字典添加值时使用的特定键对象,您仍然可以构造新键。