如何识别类型为 的唯一字典键,其中某些成员等于某物
本文关键字:字典 于某物 成员 唯一 识别 何识别 类型 RateIdentifier | 更新日期: 2023-09-27 18:32:04
我有一个字典_customRates
,其中包含 RateIdentifier
类型的键和 customRate
类型的值。 键入 T
如下所示:
public RateIdentifier(int id,
string name,
Currency currency1,
Currency currency2)
现在,我有一个特定的currency1
和currency2
,我想检查我的字典中是否存在具有这些指定货币的RateIdentifier
,如果是,则返回密钥(如果不返回一些默认值)。我知道,如果存在这样的密钥,它将是唯一具有此特定currency1
和currency2
的密钥(即两种货币确保特定密钥的唯一性)。
我发现这很困难,因为尽管我知道如何在字典上使用.Where
,但这似乎不是一个合适的解决方案,因为我知道我最多只有一个这样的键,所以每次检查整个字典似乎有点过分,因为其中一些词典特别大。
如果无法覆盖 GetHashCode() 和 Equals() ,请使用 FirstOrDefault
:
var myStuff = _customRates.FirstOrDefault(x => x.Key.currency1 == myCurrency1 && x.Key.currency2 == myCurrency2);
但是,您也可以(并且可能应该)覆盖密钥类型上的 GetHashCode() 和 Equals()(如果还没有),并使它们为相同的货币返回相同的哈希代码。这样,您可以使用字典的标准功能:
// Assume GetHashCode and Equals are overridden
var myStuff = _customRates[new RateIdentifier() { currency1 = myCurrency1, currency2 = myCurrency2 }];
查找值时,Dictionary
将首先计算指定键的哈希代码(使用 GetHashCode
)并搜索该哈希代码。如果Dictionary
中的多个元素具有相同的哈希代码,则将调用Equals
来确定哪个元素与键匹配。这意味着,即使您没有向字典添加值时使用的特定键对象,您仍然可以构造新键。