检查实际的空 System.Object 是否等于空 system.object

Check if the actual empty System.Object equals empty system.object

考虑一下:

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

编辑:我想告诉大家 onew object 而不是,比如说,重新分配。 本质上,检查运行时类型就足够了。

2 个不同的 Object 实例总是不同的。没有 .Net 比较会声明它们相同:

  • Object.ReferenceEquals - 2 个新操作 Object 将始终具有不同的参考身份
  • Object.Equal定义为引用相等
  • Object operator == 也定义为引用相等。

您不能重新定义 Object.Equals==,因为您需要先导出 class。

比较持有 Object 个实例的 2 个变量的值的唯一情况是:

  • 两者都持有对同一对象实例的引用
  • 都是null

Object 的 属性 经常用于创建唯一的 "lock only" 对象,以向 lock 提供对象的私有实例。

如果您知道两个 new object() 不同并且只想检查您的对象是否属于 Object 类型,您可以使用 GetType and check it against typeof:

var o = new object();
bool eq = o.GetType() == typeof(object); // True

int i = new Int32();
bool eq2 = i.GetType() == typeof(object); // False