1. C# / Говнокод #11663

    +141

    1. 1
    if (this.textControl1 != null && !"".Equals(text))

    String.Empty? Нет, не слышал.

    Запостил: minuzZ, 28 Августа 2012

    Комментарии (15) RSS

    • >String.Empty? Нет, не слышал.
      !IsNullOrEmpty ващет
      Ответить
      • http://msdn.microsoft.com/ru-ru/library/system.string.empty.aspx
        А String.IsNullOrEmpty проверяет на пустоту или null.
        Ответить
    • показать все, что скрыто--
      Ответить
    • Объясните мне, пожалуйста, чем String.Empty лучше, чем "", если String.Empty определён как

      public static readonly string Empty = "";

      Правильно ли я понимаю, что при использовании "" под эту строку всегда выделяется дополнительная память, а при использовании String.Empty используется один и тот же объект, и таким образом пытаются оптимизировать потребление памяти?
      Ответить
      • Да вот тоже интересно. Вот такая ссылка нагуглилась:
        http://www.dotnetperls.com/string-empty

        И судя по их бенчмарку String.Empty медленее, нежели литерал "", т.к. код с ним хуже оптимизируется.

        А по памяти как и в яве проблем не будет - все литералы интернируются при загрузке модуля.
        Ответить
      • Вот тут (http://stackoverflow.com/questions/263191) утверждается, что это дело вкуса и соглашений внутри команды, а оптимизатор справится и с тем и с тем.

        P.S. Имхо ОП пытался сказать, что String.Empty.Equals(s) смотрится чуть нагляднее, нежели "".Equals(s).
        Ответить
        • Спасибо за ссылки.
          Сделал неожиданное открытие, что text.Length == 0 работает быстрее всего. IsNullOrEmpty использует этот же метод, а не сравнивает с пустой строкой.
          Кстати, внутри класса String используется string.Empty и никогда "", поэтому можно предположить, что при присвоении и возвращении пустой строки работать должно не медленнее.
          Тест производительности по первой ссылке надуман и его можно не брать в расчёт.
          Ответить
        • А еще нагляднее, пожалуй, будет text != String.Empty. Ну или уж действительно text.Length != 0.
          Ответить
          • Имхо оптимально все-таки !text.isNullOrEmpty(). Самое наглядное и безопасное.

            P.S. То, что исходный код при text == null возвращает true это, имхо, баг а не фича.
            Ответить
            • String.IsNullOrEmpty(s).
              fixed
              Ответить
            • Майкрософт тоже так считает. И настоятельно не рекомендует сравнивать с пустой строкой. Если посмотреть, как работает сравнение строк, станет понятно, почему.
              http://msdn.microsoft.com/en-us/library/ms182279.aspx
              Ответить
              • > When targeting .NET Framework 2.0, use the IsNullOrEmpty method. Otherwise, use the Length == comparison whenever possible.

                Я все-таки надеюсь, что статья старая, и под otherwise имеется в виду древний 1.1, а не все фреймворки вышедшие после второго?
                Ответить
                • Да, конечно. До 2.0 этого метода не было. Предлагают делать то же самое, что и он, самостоятельно.
                  Ответить

    Добавить комментарий