Может кто-то объяснять мне, почему в.NET я записал бы String.IsNullOrEmpty(str)
вместо str.IsNullOrEmpty()
? Должна быть логическая причина, но я не знаю это.
Это походит на Вас, парни говорят
Если бы IsNullOrEmpty был методом экземпляра, вызов его на нулевом экземпляре вызвал бы NullReferenceException, а не возвращал бы false, как вы хотите.
Это мог бы быть метод расширения, но тогда это могло бы сбить с толку - он выглядел бы как метод экземпляра, но не действовал бы как метод.
.Если строка равна нулю, то доступных методов в ней не будет, так как нет экземпляра объекта. Вы получите исключение по нулевой ссылке при попытке вызова метода на нулевом объекте.
String.IsNullOrEmpty является статическим, поэтому он всегда будет доступен для проверки строковых объектов.
Наверное, можно поспорить, что было бы удобно иметь str.IsEmpty (Как сказал Джонатан, можно сделать метод extenion для объекта string, чтобы справиться с этим), но на самом деле это так же просто вызвать String.IsNullOrEmpty(str) и охватывает обе ситуации. Несмотря на то, что они не одинаковы, большинство людей приравнивают их к таковым (с точки зрения бизнес-логики и проверки существования значения для строки, я имею в виду) при работе со значениями строк
. String.IsNullOrEmpty
- метод класса.
Если бы Str была Nothing
(Null), то нельзя было бы вызвать метод на нем. Вызвать метод instance можно только на объекте.
IsNullOrEmpty
- статический метод для класса string
; это не метод экземпляра. Это связано с тем, что если str
является null
, то нет смысла вызывать метод экземпляра, так как в этом случае будет получено NullReferenceException
. Таким образом, IsNullOrEmpty
должен быть статическим методом.