C# 检查实际空System.Object是否等于空System.Object
考虑这一点:C# 检查实际空System.Object是否等于空System.Object,c#,clr,C#,Clr,考虑这一点: 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 = O
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
是新对象
,而不是重新分配。
基本上,检查运行时类型就足够了。对象的两个不同实例总是不同的。没有.Net比较会声明它们相同:
-2新建的opObject.ReferenceEquals
将始终具有不同的引用标识Object
定义为引用相等Object.Equal
也定义为引用相等对象运算符==
Object.Equals
或=
中的任何一个,因为您需要首先派生类
比较包含对象
实例的两个变量的值的唯一情况是:
- 两者都保留对同一对象实例的引用
- 两者都是
null
也就是说,
对象
的此属性经常用于创建唯一的“仅锁定”对象,以提供对象的私有实例来锁定。如果您知道两个新对象()
是不同的,并且只想检查您的对象是否属于对象
类型,则可以使用并检查它:
你的意思是堆中的同一个对象吗?@Rodrigodevarias否我的意思是我的o变量与
new object()完全相同,并且没有运行时值。@zaitsman:它确实有运行时值。你在想null
可能吗?@zaitsman你介意编辑一下你的问题,这样它就和公认的答案有点关联了吗?
var o = new object();
bool eq = o.GetType() == typeof(object); // True
int i = new Int32();
bool eq2 = i.GetType() == typeof(object); // False