Почему Строка. IsNullOrEmpty (ул.) и не ул. IsNullOrEmpty ()?

Может кто-то объяснять мне, почему в.NET я записал бы String.IsNullOrEmpty(str) вместо str.IsNullOrEmpty()? Должна быть логическая причина, но я не знаю это.

Это походит на Вас, парни говорят

  1. Вы не можете назвать методы от объектов, которые являются несуществующими в C#/.NET (я делаю это в C++, это просто не получает доступ ни к какому участнику Вар),
  2. Дополнительные методы не существовали в.NET 2.0
  3. Microsoft не потрудилась обновлять стандарты и вероятно чувствовала, что это было незначительно
6
задан Cœur 10 July 2018 в 12:59
поделиться

4 ответа

Если бы IsNullOrEmpty был методом экземпляра, вызов его на нулевом экземпляре вызвал бы NullReferenceException, а не возвращал бы false, как вы хотите.

Это мог бы быть метод расширения, но тогда это могло бы сбить с толку - он выглядел бы как метод экземпляра, но не действовал бы как метод.

.
25
ответ дан 8 December 2019 в 02:08
поделиться

Если строка равна нулю, то доступных методов в ней не будет, так как нет экземпляра объекта. Вы получите исключение по нулевой ссылке при попытке вызова метода на нулевом объекте.

String.IsNullOrEmpty является статическим, поэтому он всегда будет доступен для проверки строковых объектов.

Наверное, можно поспорить, что было бы удобно иметь str.IsEmpty (Как сказал Джонатан, можно сделать метод extenion для объекта string, чтобы справиться с этим), но на самом деле это так же просто вызвать String.IsNullOrEmpty(str) и охватывает обе ситуации. Несмотря на то, что они не одинаковы, большинство людей приравнивают их к таковым (с точки зрения бизнес-логики и проверки существования значения для строки, я имею в виду) при работе со значениями строк

.
9
ответ дан 8 December 2019 в 02:08
поделиться

String.IsNullOrEmpty - метод класса.

Если бы Str была Nothing (Null), то нельзя было бы вызвать метод на нем. Вызвать метод instance можно только на объекте.

5
ответ дан 8 December 2019 в 02:08
поделиться

IsNullOrEmpty - статический метод для класса string; это не метод экземпляра. Это связано с тем, что если str является null, то нет смысла вызывать метод экземпляра, так как в этом случае будет получено NullReferenceException. Таким образом, IsNullOrEmpty должен быть статическим методом.

.
4
ответ дан 8 December 2019 в 02:08
поделиться