2015-07-23 2 views
1

Рассмотрим следующее:Проверьте фактический пустой System.Object равно пуст 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.

Редактировать: Я хотел сказать, что o был new object и, скажем, не был назначен. По существу, достаточно проверить тип выполнения.

+0

вы имели в виду один и тот же объект в куче? –

+0

@RodrigodeFarias no Я имел в виду, что моя переменная o точно такая же, как 'new object()' и не имеет значения времени выполнения. – zaitsman

+0

@zaitsman: У этого есть время выполнения. Вы думаете о «нулевом», может быть? – leppie

ответ

2

Если вы знаете два new object() различны и только хотят, чтобы проверить, если ваш объект типа Object, вы можете использовать GetType и проверить его на typeof:

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

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

2 разных экземпляра Object всегда разные. Там нет никакого сравнения .Net, что объявит им то же самое:

  • Object.ReferenceEquals - 2 new'ed ор Object всегда будет иметь разные эталонные тождества
  • Object.Equal определяется как равенство ссылок
  • Object operator == также определяются как ссылки равенство.

Вы не можете повторно определить либо из Object.Equals или ==, как вам нужно, чтобы получить свой класс первый.

единственные случаи, когда сравнивающих значения 2 переменных, содержащих Object экземпляры будут истинны:

  • и держать ссылку на тот же экземпляр объекта
  • оба null

Т.е. что это свойство Object часто используется для создания уникальных объектов «только блокировка», чтобы предоставить частный экземпляр объекта lock.

Смежные вопросы