Разница между строками.Пусто и ""?
Всем привет!В чем разница между строкой и строкой?Пусто и ""?
например ,
string s1=String.Empty; string s2="";
string s1=String.Empty; string s2="";
Размещение магических значений в коде обычно не одобряется по целому ряду причин (некоторые из которых уже были объяснены). Хоть струна.Пустой кажется немного другим зверем (например, потому что у вас на самом деле нет возможности изменять константу, что является одной из причин использования констант).
Вот одно практическое отличие: вы можете щелкнуть правой кнопкой мыши на "string.Пусто" и выполните команду "найти все ссылки", чтобы найти, где пустые строки используются в вашем коде. Вы не можете сделать это с пустой строкой, назначенной с помощью двойных кавычек.
Кроме того, если вы пытаетесь удалить магические значения из своего кода, Вы можете также использовать эту существующую константу, чтобы пустые строки не сбивали вас с толку при поиске в коде кавычек, которых там не должно быть (например, если у вас есть один класс, содержащий все ваши строки, например файл ресурсов, который переводится в класс, вы можете искать все другие файлы, чтобы убедиться, что они не содержат кавычек).
Это мудро.
Обычно я не допускаю никаких непосредственных строковых констант в коде и ограничиваю любые определения констант очень немногими специальными файлами и статическими классами.
Если бы мне пришлось сделать исключение для "", очистка кода была бы намного сложнее.
Я никогда не делаю это исключение (хотя строку.Пустой не допускается, когда атрибут разрешен), поэтому я могу, например, просто выполнить поиск "" (одинарная кавычка) и уничтожить оскорбительный код.
Хороший ответ.
Добавление к чему ashokbusybee corectly сказал, что есть случаи, когда вы должны использовать ""
, например:
[DefaultValue("")] public string MyStringProperty { // Accessors }
string.Empty
вот так!
Спасибо.
Толи, надо было добавить: это потому что струна.Пустое-это статическое поле только для чтения, где принимается только константа.
Кроме того, разработчики классов атрибутов всегда должны избегать этой ситуации. Например, если есть один конструктор, принимающий строку, где пустая строка разрешена, должен быть еще один конструктор (без параметров), который устанавливает этот слот строки пустым (или нулевым, независимо от того, что подходит).
string.empty обрабатывает память эффективнее, чем string x="";
""на самом деле создает объект, но string.empty этого не делает.
Кроме того, это лучшая практика, чтобы избежать жесткого кодирования, как "";
Спасибо
Причина моего голосования 5
Автоматическое голосование 5 за принятие ответа.
Я абсолютно согласен с вашей заметкой о жестком кодировании "", но не с эффективностью: попробуйте вызвать объект.ReferenceEquals для сравнения этих двух-он вернет "true". Я не уверен, что это гарантировано.
Почти во всех случаях-струна.Пустой - это очень предпочтительно.
пожалуйста, смотрите следующую ссылку
http://msdn.microsoft.com/en-us/library/system.string.empty%28v=VS.80%29.aspx
Самое фундаментальное отличие отсутствует во всех предыдущих ответах.
Посмотрите на декларацию о string.Empty
;
public static readonly string Empty;
object.ReferenceEquals
-- они выглядели одинаково, но ничего не гарантировало этого.string.IsNullOrEmpty(string)
.Хорошее усилие, мой 5-й
Спасибо, Эспен.
Интересно, что в какой-то теме, связанной со статьей, мне пришлось доказывать, что "" работает правильно (кто-то пытался утверждать, что он будет создавать все больше и больше уникальных объектов каждый раз, по объекту.ReferencesEqual действительно может это проверить). Тем не менее, я категорически против"", так как это на самом деле все еще нежелательная непосредственная константа, как и любая другая.
--СА
Разница между строками.Пусто и "" очень мало. String.empty не создаст никакого объекта, в то время как "" создаст новый объект в памяти для проверки. Следовательно, string.empty лучше подходит для управления памятью.