В чем разница между String.Empty и "" и null?

Возможный дубликат:
В чем разница между String.Empty и ""

Является ли "" эквивалентным String.Empty?

Что предпочтительнее для инициализации строковых значений?

Ответы

Ответ 1

public sealed class String {
    //...
    public static readonly String Empty = "";
    //...
}

Используйте null, если вы хотите представить, что нет значения;

Используйте String.Empty, когда вы хотите представить, что есть значение, но значение представляет собой пустую строку.

Ответ 2

String.Empty, потому что это статическая переменная, а не "", которая должна создать новую строку, а null означает, что вы должны установить строку равным новому экземпляру строки.

(спасибо за исправление)

Ответ 3

Да. И String.Empty, но, пожалуйста, не беспокойтесь об этом.

Разница между String.Empty и "довольно мала, но есть разница." " фактически создает объект, он, скорее всего, вытащит из внутреннего пула строк, а String.Empty не создаст объект, поэтому, если вы действительно ищете конечный эффективность памяти, я предлагаю String.Empty. Тем не менее, вы должны иметь в виду, что разница настолько велика, что вы будете как никогда не видеть его в вашем коде...

Ответ 4

Используйте то, что вы считаете наиболее читаемым.

Я призываю всех найти реалистичное приложение, где есть значительная разница в производительности... этого просто не произойдет. Однако разные люди находят разные подходы более читабельными.

Лично я человек "". Я нахожу его менее загроможденным, и я никогда не сталкивался с проблемой, когда я фактически использовал " " (или что-то подобное) случайно. (Это одно из возражений часто поднимается.)

Если вы предпочитаете string.Empty, я, конечно, не буду утверждать, что вы "ошибаетесь". Я бы предположил, однако, что если вы работаете над командой, вы обсуждаете ее, чтобы узнать, что большинство людей считает более читаемым, и придерживайтесь этого. Согласованность, как правило, хорошая вещь.

EDIT: просто чтобы устранить некоторые опасения, которые могут быть вызваны утверждением, что "" создаст новую строку... он может создать новую строку один раз (возможно, за AppDomain, возможно, за процесс; конечно, и это действительно неважно). Он не будет создавать новую строку каждый раз, когда вы ее используете. Например, рассмотрите этот код:

public void Foo()
{
    string x = "";
    for (int i=0; i < 10000000; i++)
    {
        string y = "";
        // Do something here
    }
    string z = "";
}

Вам гарантировано, что x, y и z будут ссылаться на одну и ту же строку. В наибольшей степени вызов Foo будет означать, что создается одна пустая строка, и только в первый раз, когда вы ее вызываете, и только если вы еще не использовали пустой литерал нигде в программе. В приведенном выше коде не будет создано 10 миллионов новых строк.

Ответ 5

Считается, что лучше использовать string.Empty, однако они эффективно равны. Однако они не совпадают с нулевыми значениями.

Ответ 6

ОТ http://msdn.microsoft.com/en-us/library/system.string.empty.aspx

Значение этого поля представляет собой строку нулевой длины, "".

В коде приложения это поле чаще всего используется в назначениях для инициализации строковой переменной в пустую строку. Чтобы проверить, является ли значение строки String..::. Пусто, используйте метод IsNullOrEmpty.

Ответ 7

Они равны. Но String.Empty является постоянным.

"" - это способ создания String.