Разница между «String» и «string» в .NET и что лучше?

15

В .NET Framework, по крайней мере на языке C #, у нас есть две «версии» строкового типа:

  • «Строка»
  • "String"

Кажется, что они взаимозаменяемы, но действительно ли они? Если они не являются взаимозаменяемыми, лучше ли использовать одно вместо другого и при каких обстоятельствах?

Cyberherbalist
источник
1
Аналогично этому вопросу: stackoverflow.com/q/6000517/6504
Agent_9191
2
Стилистически я склонен использовать строчную версию, когда я ссылаюсь на тип, и прописную версию, когда я вызываю статический метод System.String.
Джоэл Мюллер
4
Идентичен stackoverflow.com/questions/7074/… .
zzzzBov
2
stringне существует в .net, он существует только в C #.
CodesInChaos
1
Хотя это может быть немного более подходящим для переполнения стека, я не думаю, что это полностью не в тему для программистов, и, поскольку переполнение стека уже имеет хотя бы один дубликат, не будет особого смысла переносить это. Поэтому, пожалуйста, прекратите помечать / закрывать голосование для переноса, если вы считаете, что это должно быть закрыто, это круто, но оно должно быть закрыто, а не перенесено.
Яннис

Ответы:

30

Ну, согласно MSDN

строка является псевдонимом для строки в .NET Framework.

Где "Строка" на самом деле System.String.

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

Было бы лучше согласоваться с тем, который вы использовали.

ChrisF
источник
по какой-то причине у меня было в голове, что String был оберткой класса вокруг строки со значением, и это приводит к идее бокса ... я тут совершенно не прав?
Аарон Анодид
1
@ Габриэль Нет, String(и, следовательно string, псевдоним) являются ссылочными типами.
Крис Харпер
@ Габриэль: разве Java не делает это с такими вещами, как байт против байта?
whatsisname
То же самое верно и для Double против Double, и для других типов данных?
Гэвин Коутс
1
@AaronAnodide Я считаю, что это соглашение Java, о котором вы, вероятно, слышали.
КЧалу
20

Как уже указывалось, они одно и то же и stringявляются просто псевдонимом String.

Для чего это стоит, я использую stringдля объявления типов - переменных, свойств, возвращаемых значений и параметров. Это согласуется с использованием других типов систем - int, bool, и varт.д. (хотя Int32и Booleanтоже правильно).

Я использую Stringпри использовании статических методов в классе String, например String.Split()или String.IsNullOrEmpty(). Я чувствую, что это имеет больше смысла, потому что методы принадлежат классу, и это согласуется с тем, как я использую другие статические методы.

Кирк Бродхерст
источник
Мы используем это соглашение на работе, и мне это нравится. Мой мозг автоматически устанавливает связь.
ВОО
4

Я бы предложил использовать строчные string. Прописные буквы Stringбудут использовать первый класс с именем String, который он найдет в импортированных пространствах имен ... как правило, это так System.String. Вместо этого можно использовать собственный класс String.

Брайан Бетчер
источник
3
Если у вас есть два разных импортированных типа с одним и тем же именем, и вы используете это имя без указания пространства имен, вы получите ошибку.
svick
Работу можно обмануть, обмануть Stringневозможно string.
Брайан Бетчер
Тем не менее, я не думаю, что это достаточно хорошая причина для использования string.
svick
5
Как «кто-то может сломаться» против «никто не сломается», когда все остальные идентичны, не является достаточной причиной?
Брайан Бетчер
4

string это ключевое слово C #, которое просто псевдоним для System.String

..но как это ключевое слово, ваш редактор синтаксиса / IDE раскрасит его в цвете ключевого слова, так же как int, double, if, else и т. д. Стилистически вы можете предпочесть использовать ключевое слово, а не System.Stringтип (или сразу Stringпосле ты сделал using System;).

Это точка ниша , хотя, как , хотя bool, char, int, doubleи stringвсе ключевые слова , псевдонимы типов систем, stringявляется нечетным один выход , как это ссылочный тип и другие типы значений.

JBRWilkinson
источник
4
objectявляется псевдонимом ключевого слова для ссылочного типа
nikie
Ах, да, я забыл все об этом - спасибо за напоминание.
JBRWilkinson
2

stringэто просто псевдоним для String, они в конечном итоге то же самое.

Вы можете использовать в зависимости от того вы предпочитаете, хотя я обычно использую , stringкогда я планирую использовать его так же, как примитивный тип данных (аналогично int, floatили bool) и Stringкогда я планирую использовать его в качестве объекта / класса. Например:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

В приведенном выше случае я планирую использовать fooпросто для хранения некоторого текста (фактически как примитива), поэтому я использую string; Однако, когда я звоню, String.isNullOrWhitespace(string)я использую String. Я делаю это, потому что обычно первая буква имен классов пишется с большой буквы ( String), а первая буква примитивов (например, int) - нет.

ВВВ
источник
-2

Строка используется с пространством имен System.String, строка используется в спецификации компилятора C #, более того, System.String является значением ссылочного типа. Вы предпочитаете иметь дело с объектами System, строка только для литеральных целей. Система и система работают одинаково.

string TC = new System.String('/', 5);

Строка используется для сравнения, равных и других целей.

Анжан Кант
источник
4
кажется, это не дает ничего существенного по сравнению с предыдущими 6 ответами
комнат