接上一篇,我们大致聊了==与!=,而且也知道了比较两个object类型的值是否相等需要用Equals方法。可以说Equals适合用来比较两个未知类型的对象。Object中其实有两个Equals方法,一个是虚方法,一个是静态方法。可以看看它的实现:
上篇文章我们用Equals比较了两个Object类型对象,在这里我们可以自己实现一个方法:
public static bool ObjEqual(object p1, object p2) =>p1==null ? p2==null : p1.Equals(p2);
为什么这么写呢?因为虚方法的这个比较在p1为null时会报空引用的异常。
如果对象的类型在编译时未知,可以使用静态方法,静态方法提供支持null值的相等比较算法: object p1 = null; object p2 = 5; //False Console.WriteLine(object.Equals(p1, p2)); p2 =null; //True Console.WriteLine(object.Equals(p1, p2));
编写泛型类型时Equals是很有用的,因为==于!=无法用于T类型,具体可以看下面的例子:
class test { T value; public void SetValue(T NewValue) { if (!Object.Equals(NewValue,value)) { value = NewValue; ValueChange(); } } protected virtual void ValueChange() { } }
当然也有更佳的实现方式不过就需要自己去探索发现了!
今天更新到这儿,喜欢这篇文章就点个?吧!大家晚安啦