如何识别类型为 的唯一字典键,其中某些成员等于某物

本文关键字:字典 于某物 成员 唯一 识别 何识别 类型 RateIdentifier | 更新日期: 2023-09-27 18:32:04

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

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

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

我发现这很困难,因为尽管我知道如何在字典上使用.Where,但这似乎不是一个合适的解决方案,因为我知道我最多只有一个这样的键,所以每次检查整个字典似乎有点过分,因为其中一些词典特别大。

如何识别类型为 <RateIdentifier> 的唯一字典键,其中某些成员等于某物

如果无法覆盖 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来确定哪个元素与键匹配。这意味着,即使您没有向字典添加值时使用的特定键对象,您仍然可以构造新键。