gpt4 book ai didi

c# - 字典中结构键的值相等和类键的引用相等

转载 作者:行者123 更新时间:2023-11-30 19:25:18 25 4
gpt4 key购买 nike

我正在实现一个通用字典。我希望 TKey 是结构或类。如果它是一个结构,我想按值比较键,否则按引用。

我既不能使用 Object.Equals(仅适用于结构)也不能使用 Object.ReferenceEquals(仅适用于引用类型)。那我用什么方法来判断是否相等呢?

== 运算符可能会解决这个问题,但如果不为键指定任何约束(where TKey : ...)我就无法使用它。我应该声明哪些接口(interface)?

最佳答案

I can't use neither Object.Equals (only works with structs) nor Object.ReferenceEquals (only works with reference types).

看来您可能只是误解了它们的工作原理。 System.Object.Equals() 无论是处理值类型还是引用类型,方法实现都同样有效(没有双关语意)。

对于值类型,它会逐个字段进行比较。如果被比较的两个值是相同的类型,并且它们的每个字段都具有相同的值,那么它们被认为是相等的。

对于引用类型,它只是使用引用相等性,正如您所希望的那样。

请注意,类型可以覆盖此方法,因此实际使用的实现可能与上述不同。例如,string type 覆盖了方法,所以两个不是同一个实例的字符串仍然可以比较相等。但默认情况下,会发生上述情况。

最后我会指出,如果您想要的是一种完全像 Dictionary<TKey, TValue> 的行为类,最好的解决方案可能就是只使用该类。 :)

关于c# - 字典中结构键的值相等和类键的引用相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720108/

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