.net 中的相等性比较
2021-06-20 06:03
标签:ast 排序规则 实参 操作 接受 sim 指定 静态 默认 .net 框架的源码实现中,ReferenceEquals 方法使用 == 操作符进行判断: 代码参考:http://referencesource.microsoft.com/#mscorlib/system/object.cs,4d607d6d56a93c7e 在 .net 中,字符串是引用类型,但 == 运算符和 Equals 方法都使用值相等性对字符串进行比较。默认的比较方式是区分大小写的,有时我们希望进行不区分大小写的比较。因此 String 类还有一个 Equals 方法的重载,允许指定如何对字符串进行相等性比较: StringComparison 参数允许指定要使用的区域性、大小写和排序规则。 字符串的例子提示相等性比较不是绝对的,两个相同的对象,可能在一个上下文中相等,而在另一个上下文中不相等。 这是一个虚方法,具体行为取决于是否进行了重写。Object 中 Equals 方法的实现是,如果参数 obj 与当前对象是同一实例,则返回 true。 ValueType 重写了 Equals 方法:若两个值类型变量的类型相同,并且所有实例字段相等,则它们具有值相等性。ValueType 中的 Equals 方法使用反射实现,对性能略有影响。对于自定义值类型,可考虑重写 Equals 方法避免反射带来的性能损失。 这是实用工具性质的方法,用于判断两个变量是否相等,方法签名是: 重写 Object.Equals 实例方法时,应遵循以下规则: IEquatable 此接口是从 .net 2.0 开始伴随泛型集合引入的。在泛型集合上调用 Contains、IndexOf、LastIndexOf 和 Remove 等方法时,将使用此接口进行相等性比较。根据 MSDN 的说明,任何可能存储在泛型集合中的类都应实现此接口。 如果实现了 IEquatable 接口,还应重写 Object.Equals 实例方法和 Object.GetHashCode 方法。 IEqualityComparer 声明了两个方法: 此接口允许在泛型集合中跳过 T 本身的 Equals 和 GetHashCode 实现,如果向泛型集合提供了 IEqualityComparer EqualityComparer .net 中的相等性比较 标签:ast 排序规则 实参 操作 接受 sim 指定 静态 默认 原文地址:http://www.cnblogs.com/dongbeifeng/p/equality-comparing-in-dot-net.html引用相等性和值相等性
// x, y, z 都是引用类型变量
object x = new object();
object y = new object();
object z = x;
// 输出 false,x 和 y 不具有引用相等性
Console.WriteLine(object.ReferenceEquals(x, y));
// 输出 true,x 和 z 具有引用相等性
Console.WriteLine(object.ReferenceEquals(x, z));
// 输出 true,x 和自身具有引用相等性
Console.WriteLine(object.ReferenceEquals(x, x));
int i = 5;
int j = 6;
int k = 5;
// 输出 false,i 和 j 不具有值相等性
Console.WriteLine(i.Equals(j));
// 输出 true,i 和 k 具有值相等性
Console.WriteLine(i.Equals(k));
// 输出 true,i 和自身具有值相等性
Console.WriteLine(i.Equals(i));
== 和 != 操作符
Object.ReferenceEquals 静态方法
int i = 5;
// 输出 false,i 被装箱两次,是两个不同的对象,不具有引用相等性
Console.WriteLine(object.ReferenceEquals(i, i));
// 相当于:
object x = i;
object y = i;
Console.WriteLine(object.ReferenceEquals(x, y));
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[System.Runtime.Versioning.NonVersionable]
public static bool ReferenceEquals (Object objA, Object objB) {
return objA == objB;
}
字符串相等性
public bool Equals(string value, StringComparison comparisonType)
Object.Equals 实例方法
public virtual bool Equals(Object obj)
Object.Equals 静态方法
public static bool Equals(Object objA, Object objB)
public static bool Equals(Object objA, Object objB)
{
if (objA == objB)
{
return true;
}
if (objA == null || objB == null)
{
return false;
}
return objA.Equals(objB);
}
重写 Object.Equals 实例方法
IEquatable
bool Equals(T other)
IEqualityComparer
bool Equals(T x, T y)
int GetHashCode(T obj)
上一篇:jquery基础
下一篇:JSLint报错翻译