ten*_*nor 24
=是分配,就像在
var i = 5;
Run Code Online (Sandbox Code Playgroud)
不要在if语句中使用此运算符.
==用于比较
if(i == 6){...}
Run Code Online (Sandbox Code Playgroud)
C#中没有===运算符
小智 12
(以下是一些"评论",但是在评论中太长,并且会在本文中与其他评论一起丢失.)
在C#中==(与C#中的所有运算符一样)是非多态的.也就是说,==调用它的"版本" 总是基于编译时的静态类型.
例如:
object a = Guid.NewGuid();
object b = new Guid(""+a);
a == b // false -- uses object.== -- an *identity* compare
Run Code Online (Sandbox Code Playgroud)
的虚拟方法,在另一方面,被限定在,因此是在所有子类型的多态.Equals object
object a = Guid.NewGuid();
object b = new Guid(""+a);
a.Equals(b) // true -- uses Guid.Equals
Run Code Online (Sandbox Code Playgroud)
选择使用哪种(==或Equals)有时是微妙的 - 但很重要.大多数集合类型将Equals用于诸如此类的任务Contains.(这对于所有通用容器几乎都是必需的,因为T.==对于任意类型都没有T.)
// compile-time error: Operator '==' cannot be applied to operands of type 'T' and 'T'
bool equals<T> (T a, T b) { return a == b; }
// fair-game, because object defines Equals and it's polymorphic to subtypes
bool equals<T> (T a, T b) { return a.Equals(b); }
Run Code Online (Sandbox Code Playgroud)
看我什么时候应该使用==什么时候应该使用Equals?和实施等于和等于运算符的指南(==)等.就个人而言,我使用==的Equals是静态可解析的具体类型,其==定义明确,我不会(通过合同或惯例)处理子类型 - 示例是string与(最)结构类型(例如int,Guid).
快乐的编码.
编辑:没有C#===操作符(正如人们所说,呃!).如果谈论JavaScript变体,它将是大约:
bool trippleEquals (object a, object b) {
return a.GetType() == b.GetType() && a.Equals(b);
}
Run Code Online (Sandbox Code Playgroud)
(它在JavaScript中是严格的相等 - 但不是对象标识).
如果谈论对象标识,那么它应该与(object)a == (object)b具有相同语义的相同object.ReferenceEquals(a,b).