考虑一下:
var o = new object();
如何在运行时检查o
是否与new object()
相同。
这失败了:
var o = new object();
var eq1 = o.Equals(new object());
var eq2 = o.Equals(default(object));
var eq3 = o == new object();
var eq4 = Object.Equals(o, new object());
var eq5 = Object.ReferenceEquals(o, new object());
所有eq
个变量均为false
。
编辑:我希望告诉我o
是new object
而不是重新分配。
基本上,检查运行时类型就足够了。
答案 0 :(得分:2)
如果您知道两个new object()
不同,并且只想检查您的对象是否为Object
类型,则可以使用GetType
并针对typeof
进行检查:< / p>
var o = new object();
bool eq = o.GetType() == typeof(object); // True
int i = new Int32();
bool eq2 = i.GetType() == typeof(object); // False
答案 1 :(得分:1)
Object
的2个不同实例总是不同的。没有.Net比较会声明它们是相同的:
Object.ReferenceEquals
- 2个新的操作Object
将始终具有不同的参考标识Object.Equal
定义为引用相等Object operator ==
也被定义为引用相等。您无法重新定义Object.Equals
或==
,因为您需要先导出课程。
比较保持Object
个实例的2个变量的值的唯一情况是:
null
即。 Object
的此属性经常用于创建唯一的“仅锁定”对象,以便将对象的私有实例提供给lock
。