В чем разница между строкой и строкой в ​​C #? - PullRequest
5963 голосов
/ 10 августа 2008

Пример ( обратите внимание на регистр ):

string s = "Hello world!";
String s = "Hello world!";

Каковы рекомендации для использования каждого из них? И каковы различия ?

Ответы [ 61 ]

8 голосов
/ 04 июня 2016

Если честно, на практике обычно нет разницы между System.String и string .

Все типы в C # являются объектами и все являются производными от System.Object class. Единственное отличие состоит в том, что строка - это ключевое слово C # и String , которые вы можете использовать в качестве имени переменной. System.String - это стандартное имя .NET этого типа, а строка - удобное имя C #. Вот простая программа, которая представляет разницу между System.String и строкой.

string a = new string(new char[] { 'x', 'y', 'z' });
string b = new String(new char[] { 'x', 'y', 'z' });
String c = new string(new char[] { 'x', 'y', 'z' });
String d = new String(new char[] { 'x', 'y', 'z' });
MessageBox.Show((a.GetType() == typeof(String) && a.GetType() == typeof(string)).ToString()); // shows true
MessageBox.Show((b.GetType() == typeof(String) && b.GetType() == typeof(string)).ToString()); // shows true
MessageBox.Show((c.GetType() == typeof(String) && c.GetType() == typeof(string)).ToString()); // shows true
MessageBox.Show((d.GetType() == typeof(String) && d.GetType() == typeof(string)).ToString()); // shows true

@ JonSkeet в моем компиляторе

public enum Foo : UInt32 { }

работает. У меня сообщество Visual Studio 2015.

7 голосов
/ 20 января 2016

Разницы между ними нет. Вы можете использовать любой из них в своем коде.

System.String - это класс (ссылочный тип), определенный mscorlib в пространстве имен System. Другими словами, System.String является типом в CLR.

string является ключевым словом в C#

7 голосов
/ 26 июля 2014

В контексте Документация MSDN , класс String документируется, как и любой другой тип данных ( например, , XmlReader, StreamReader) в BCL .

И string документируется как ключевое слово (C # Reference) или как любая базовая языковая конструкция C # ( например, , for, while, default).

Ссылка .

7 голосов
/ 10 ноября 2017

A string - это последовательный набор символов , который используется для представления текста.

A Строковый объект - это последовательная коллекция объектов System.Char , представляющих строку; объект System.Char соответствует единице кода UTF-16.

Значением объекта String является содержимое последовательной коллекции объектов System.Char, и это значение является неизменным (то есть оно доступно только для чтения).

Для получения дополнительной информации об неизменяемости строк см. Раздел Immutability и класс StringBuilder в msdn.

Максимальный размер объекта String в памяти составляет 2 ГБ или около 1 миллиарда символов.

Примечание: ответ извлекается из справочного раздела msdn. Вы можете увидеть полное содержание здесь, в теме msdn String Class в разделе Замечания

7 голосов
/ 25 марта 2017

строка равна System.String
в VS2015, если вы напишите это

System.String str;

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

string str;
6 голосов
/ 20 мая 2014

String: Объект String называется неизменяемым (только для чтения), поскольку его значение нельзя изменить после его создания. Методы, которые появляются для изменения объекта String, на самом деле возвращают новый объект String, который содержит модификацию. Если необходимо изменить фактическое содержимое строкового объекта

строка: Тип строки представляет собой последовательность из нуля или более символов Юникода. строка является псевдонимом для строки в .NET Framework. string является внутренним типом данных C # и псевдонимом для системного типа «System.String». В спецификации C # говорится, что по стилю ключевое слово ( string ) предпочтительнее, чем полное имя типа системы (System.String или String). Хотя строка является ссылочным типом, операторы равенства (== и! =) Определены для сравнения значений строковых объектов, а не ссылок. Это делает тестирование на равенство строк более интуитивным. Например:

Разница между строкой и строкой:

  • string обычно используется для объявления, в то время как String используется для доступа к методам статических строк
  • Вы можете использовать 'string', объявлять поля, свойства и т. Д., Использующие предопределенный тип 'string', поскольку спецификация C # говорит мне, что это хороший стиль.
  • Вы можете использовать 'String' для использования системных методов, таких как String.Compare и т. Д. Они изначально определены в System.String, а не в «string». 'string' в данном случае это просто псевдоним.
  • Вы также можете использовать 'String' или 'System.Int32' при взаимодействии с другой системой, особенно если они совместимы с CLR. то есть - если бы я получал данные из другого места, я бы десериализовал их в System.Int32, а не в int, если бы источник по определению был чем-то другим, чем система C #.
6 голосов
/ 28 декабря 2015

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

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

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

6 голосов
/ 05 января 2018

В C # строка - это короткая версия System.String (String). Они в основном означают одно и то же.

Как кто-то упоминал, это просто как bool и Boolean, разница не большая ..

6 голосов
/ 18 октября 2017

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

Если вы щелкнете правой кнопкой мыши по ключевому слову string и выберете Go to definition в контекстном меню, вы попадете в класс String - это просто синтаксический сахар, но он улучшает читаемость imo.

5 голосов
/ 12 января 2018

string - это короткое имя System.String. String или System.String - это имя строки в CTS(Common Type System).

...