В C # я должен использовать string.Empty или String.Empty или "" для инициализации строки? - PullRequest
670 голосов
/ 04 ноября 2008

В C # я хочу инициализировать строковое значение пустой строкой.

Как мне это сделать? Каков правильный путь и почему?

string willi = string.Empty;

или

string willi = String.Empty;

или

string willi = "";

или что?

Ответы [ 29 ]

8 голосов
/ 12 октября 2016

Я выполнил этот очень простой тест, используя следующий метод в консольном приложении:

private static void CompareStringConstants()
{
    string str1 = "";
    string str2 = string.Empty;
    string str3 = String.Empty;
    Console.WriteLine(object.ReferenceEquals(str1, str2)); //prints True
    Console.WriteLine(object.ReferenceEquals(str2, str3)); //prints True
}

Это ясно указывает на то, что все три переменные, а именно str1, str2 и str3, хотя и инициализируются с использованием другого синтаксиса, указывают на один и тот же объект строки (нулевой длины) в памяти. Я выполнил этот тест в консольном приложении .NET 4.5. Внутренне они не имеют никакой разницы, и все сводится к удобству того, которое вы хотите использовать в качестве программиста. Такое поведение строкового класса известно как интернирование строк в .NET. У Эрика Липперта есть очень хороший блог здесь , описывающий эту концепцию.

7 голосов
/ 22 января 2009

Я настоятельно предпочитаю String.Empty, помимо других причин, чтобы вы знали, что это такое, и что вы случайно не удалили содержимое, но прежде всего для интернационализации. Если я вижу строку в кавычках, я всегда задаюсь вопросом, является ли это новым кодом, и его следует поместить в таблицу строк. Поэтому каждый раз, когда код изменяется / пересматривается, вам нужно искать «что-то в кавычках», и да, вы можете отфильтровывать пустые строки, но я говорю людям, что это хорошая практика - никогда не помещать строки в кавычки, если вы не знаете, что они не будут локализованы .

7 голосов
/ 04 ноября 2008

Любой из вышеперечисленных.

Есть много, много лучших вещей, чтобы понтифицировать. Например, какой цвет коры подходит к дереву лучше всего, я думаю, что смутный коричневый с оттенками мха Дульсет.

6 голосов
/ 04 ноября 2008

string является синонимом для типа System.String, они идентичны.

Значения также идентичны: string.Empty == String.Empty == ""

Я бы не использовал символьную константу "" в коде, скорее string.Empty или String.Empty - проще понять, что имел в виду программист.

Между string и String Мне больше нравятся строчные буквы string только потому, что я много лет работал с Delphi, а стиль Delphi - строчные string.

Итак, если бы я был вашим начальником, вы бы написали string.Empty

6 голосов
/ 24 мая 2012

Никто не упомянул, что в VisualStudio String кодируется цветом иначе, чем строка. Что важно для читабельности. Кроме того, строчные буквы обычно используются для переменных и типов, что не имеет большого значения, но String.Empty - это константа, а не переменная или тип.

5 голосов
/ 04 ноября 2008

Я не имею значения. Последний, однако, самый быстрый для ввода:)

4 голосов
/ 10 июня 2015

Я бы предпочел string.Empty над String.Empty, потому что вы можете использовать его, не добавляя using System; в ваш файл.

Что касается выбора "" над string.Empty, это личное предпочтение и должно решаться вашей командой.

4 голосов
/ 01 сентября 2010

Это полностью стиль кода, сделайте так, как .NET обрабатывает строки. Тем не менее, вот мои мнения:)

Я всегда использую имена типов BCL при доступе к статическим методам, свойствам и полям: String.Empty или Int32.TryParse(...) или Double.Epsilon

Я всегда использую ключевые слова C # при объявлении новых экземпляров: int i = 0; или string foo = "bar";

Я редко использую необъявленные строковые литералы, так как мне нравится иметь возможность сканировать код, чтобы объединить их в повторно используемые именованные константы. В любом случае компилятор заменяет константы на литералы, так что это скорее способ избежать магических строк / чисел и придать им немного больше значения с помощью имени. Кроме того, изменить значения проще.

4 голосов
/ 04 ноября 2008

Неважно - это одно и то же. Однако главное, чтобы вы были последовательны

p.s. Я постоянно борюсь с этим "что правильно".

3 голосов
/ 04 ноября 2008

Я использую третий, но из двух других первый кажется менее странным. Строка является псевдонимом для String, но, видя их в задании, перестает работать.

...