- 1
if (this.textControl1 != null && !"".Equals(text))
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+141
if (this.textControl1 != null && !"".Equals(text))
String.Empty? Нет, не слышал.
absolut 28.08.2012 16:14 # +2
!IsNullOrEmpty ващет
minuzZ 28.08.2012 16:18 # +1
А String.IsNullOrEmpty проверяет на пустоту или null.
guest 28.08.2012 19:09 # −1
rat4 28.08.2012 19:13 # +2
< textControl1
> text
krypt 28.08.2012 17:32 # −5
ErmineMD 28.08.2012 22:02 # +1
public static readonly string Empty = "";
Правильно ли я понимаю, что при использовании "" под эту строку всегда выделяется дополнительная память, а при использовании String.Empty используется один и тот же объект, и таким образом пытаются оптимизировать потребление памяти?
bormand 28.08.2012 22:12 # +2
http://www.dotnetperls.com/string-empty
И судя по их бенчмарку String.Empty медленее, нежели литерал "", т.к. код с ним хуже оптимизируется.
А по памяти как и в яве проблем не будет - все литералы интернируются при загрузке модуля.
bormand 28.08.2012 22:29 # +2
P.S. Имхо ОП пытался сказать, что String.Empty.Equals(s) смотрится чуть нагляднее, нежели "".Equals(s).
ErmineMD 28.08.2012 23:01 # +1
Сделал неожиданное открытие, что text.Length == 0 работает быстрее всего. IsNullOrEmpty использует этот же метод, а не сравнивает с пустой строкой.
Кстати, внутри класса String используется string.Empty и никогда "", поэтому можно предположить, что при присвоении и возвращении пустой строки работать должно не медленнее.
Тест производительности по первой ссылке надуман и его можно не брать в расчёт.
minuzZ 29.08.2012 09:01 # 0
bormand 29.08.2012 09:09 # 0
P.S. То, что исходный код при text == null возвращает true это, имхо, баг а не фича.
bormand 29.08.2012 09:25 # 0
fixed
ErmineMD 30.08.2012 05:28 # +1
http://msdn.microsoft.com/en-us/library/ms182279.aspx
bormand 30.08.2012 08:32 # 0
Я все-таки надеюсь, что статья старая, и под otherwise имеется в виду древний 1.1, а не все фреймворки вышедшие после второго?
ErmineMD 30.08.2012 21:38 # +1