事情起因
今天在复习 hashtable 时,想到能不能给 hashtable 扩展一个根据 value 得到 key 的方法
以下是代码:
public static object GetKey(this Hashtable hashtable, object value)
{
foreach (DictionaryEntry de in hashtable)
{
//if (de.Value == value)
if (de.Value.Equals(value))
{
return de.Key;
}
}
// 如果未找到匹配的键,返回null或抛出
return null;
}
但在做的过程中,用来判断 传入的值(Value) 和 de.Value 是否相等时,我却 用的 == 的判断符,试了几次返回的都是 null。
于是回忆起了,关于.Equals 和 == 运算符 判断相等时的区别
.Equals 方法:
.Equals 主要是用于比较两个对象的内容是不是相等的。但相对对于引用类型,这通常涉及比较对象的实际数据,而不是引用本身。
在以上的纠正中,我最后选用了 调用 de.Value 对象的 Equals 方法来与 value 进行比较。感觉如果 value 的类型是复杂的对象类型时,使用 Equals 会更保险!
== 运算符:
== 运算符,对于引用类型来说,它是是 检查两个引用值 是否指向内存中的同一对象(即判断引用的内存位置是否相等)。
如果说 我在 Hashtable 中存入的值都是简单类型(如 int, string, float 等),使用 == 应该就可以了,因为这些类型的 == 运算符通常已经重载为比较值的内容。
但是,我在 Hashtable 中的值是对象类型(引用类型),使用 == 导致不正确对比,因为它只比较引用值,而不是对象的实际内容。
最后进行了几次测试
数据示例
调用
控制台
HaHaHa真的好久没有用过 hashtable 和去注意 == 和 .Equals 方法之间的区别了!