当前位置: 代码迷 >> C# >> 如其不重载operator==,那==的默认行为是Equals还是ReferenceEquals
  详细解决方案

如其不重载operator==,那==的默认行为是Equals还是ReferenceEquals

热度:382   发布时间:2016-05-05 03:23:07.0
如果不重载operator==,那==的默认行为是Equals还是ReferenceEquals?
这个.net有规定吗?
------解决思路----------------------
==操作对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false。
对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。
------解决思路----------------------
是ReferenceEquals,实验可以证实 :

class Program
{
    static void Main(string[] args)
    {
        A a1 = new A(), a2 = new A();
        bool e1 = a1 == a2;       // false
        bool e2 = a1.Equals(a2);  // true
    }

    class A
    {
        public override bool Equals(object obj)
        {
            return true;
        }
    }
}


因为
------解决思路----------------------
这个不引用msdn怎么行。

For predefined value types, the equality operator (==) returns true if the values of its operands are equal, false otherwise. For reference types other than string, == returns true if its two operands refer to the same object.

来自msdn:
== Operator (C# Reference)
https://msdn.microsoft.com/en-us/library/53k8ybth.aspx
------解决思路----------------------
引用:
==操作对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false。
对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。



string a = "123";
            string b = "123";

            if (a == b)
            {
                var c = true;
            }

            Test d = new Test();
            var e = d;

            if (d == e)
            {
                var f = true;
            }

            Test g = new Test();

            if (d == g)
            {
                var h = true;
            }
debug这段代码就在了。
  相关解决方案