gpt4 book ai didi

c# - 从HashSet中获取原始值

转载 作者:行者123 更新时间:2023-12-02 08:36:51 35 4
gpt4 key购买 nike

更新:从 .Net 4.7.2 开始,HashSet.TryGetValue - docs可用。
HashSet.TryGetValue - SO post

<小时/>

我对 HashSet 有疑问,因为它没有提供任何类似于 Dictionary 中已知的 TryGetValue 的方法。我需要这样的方法——传递元素在集合中查找,并设置从其集合中返回元素(找到时)。

旁注——“为什么你需要集合中的元素,你已经有了那个元素?”。不,我不这么认为,平等和身份是两个不同的东西。

HashSet 不是密封的,但它的所有字段都是私有(private)的,因此从它派生是没有意义的。我无法使用 Dictionary 来代替,因为我需要 SetEquals 方法。我正在考虑获取 HashSet 的源代码并添加所需的方法,但许可证并不是真正的开源(我可以查看,但无法分发/修改)。我可以使用反射,但 HashSet 中的数组不是 readonly,这意味着我无法在每个实例生命周期内绑定(bind)到这些字段一次。

而且我不想仅对单个类使用完整的库。

到目前为止,我一直坚持使用 LINQ SingleOrDefault。所以问题是如何解决这个问题 - 将 HashSetTryGetValue 一起使用?

最佳答案

也许您应该从 HashSet 切换到 SortedSet

对于 SortedSet 有一个简单的 TryGetValue():

public bool TryGetValue(ref T element)
{
var foundSet = sortedSet.GetViewBetween(element, element);
if(foundSet.Count == 1)
{
element = foundSet.First();
return true;
}
return false;
}

调用时,该元素只需要设置比较器中使用的所有属性。它返回在 Set 中找到的元素。

关于c# - 从HashSet中获取原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872099/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com