Tag: 等于操作符

不能运算符==应用于C#中的genericstypes?

根据MSDN中 ==运算符的文档, 对于预定义的值types,如果操作数的值相等,则相等运算符(==)返回true,否则返回false。 对于string以外的引用types,如果其两个操作数引用同一个对象,则==返回true。 对于stringtypes,==比较string的值。 用户定义的值types可以重载==运算符(请参阅运算符)。 因此,用户定义的引用types,尽pipe默认情况下==的行为如上所述的预定义和用户定义的引用types。 那么为什么这段代码片段无法编译? void Compare<T>(T x, T y) { return x == y; } 我得到错误运算符'=='不能应用于types'T'和'T'的操作数 。 我不知道为什么,因为据我所知, ==运算符是预定义的所有types? 编辑:谢谢大家。 起初我没有注意到这个陈述只是关于参考types。 我还认为,所有值types都提供了逐位比较,现在我知道这是不正确的。 但是,如果我使用引用types, ==运算符是否使用预定义的引用比较,或者如果types定义了运算符,它会使用运算符的重载版本吗? 编辑2:通过试验和错误,我们了解到,当使用不受限制的genericstypes时, ==运算符将使用预定义的引用比较。 实际上,编译器会使用它可以find的限制types参数的最好的方法,但是不会再看。 例如,即使在Test.test<B>(new B(), new B())时,下面的代码将始终显示为true : class A { public static bool operator==(A x, A y) { return true; } } class B : A […]