Різниця між "String" і "string" в .NET і що найкраще?


15

У .NET Framework, принаймні, мовою C #, у нас є дві "версії" типу рядка:

  • "рядок"
  • "Рядок"

Здається, вони взаємозамінні, але чи справді вони є? Якщо вони не взаємозамінні, то як правило, краще використовувати одне замість іншого та за яких обставин?


1
Схожа на це питання: stackoverflow.com/q/6000517/6504
Agent_9191

2
У стилістичному плані я, як правило, використовую малу версію, коли я маю на увазі тип, і верхню версію, коли я викликаю статичний метод System.String.
Джоель Мюллер

4
Ідентично для stackoverflow.com/questions/7074/… .
zzzzBov

2
stringне існує в .net, він існує лише в C #.
CodesInChaos

1
Хоча це може бути трохи більше підходить для переповнення стека, я не думаю, що це зовсім не тематика для програмістів, і оскільки Stack Overflow вже має принаймні один дублікат, не було б великого сенсу мігрувати це. Тому, будь ласка, припиніть позначення / закриття голосування для міграції, якщо ви вважаєте, що це має бути закрито, це здорово, але його слід закрити, а не перенести.
янніс

Відповіді:


30

Ну за даними MSDN

рядок - псевдонім для String в .NET Framework.

Де насправді "Рядок" System.String.

Я б сказав, що вони взаємозамінні, і немає різниці, коли і де ви повинні використовувати те чи інше.

Було б краще узгоджуватися з тим, ким ви користувалися, хоча.


чомусь у мене було в голові, що String - це класова обгортка навколо рядка, набраного значенням, і це призводить до ідеї боксу ... я тут абсолютно помиляюся?
Аарон Анодід

1
@Gabriel Ні String(і, отже string, псевдонім), є еталонними типами.
Кріс Харпер

@Gabriel: чи Java не робить цього з такими речами, як байт проти байта?
whatsisname

Чи те ж саме стосується Double та Double та інших типів даних?
Гевін Коутс

1
@AaronAnodide Я вважаю, що це конвенція Java, яка, напевно, ви там про це чули.
KChaloux

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, якщо, інакше тощо. Стилістично ви можете скористатись ключовим словом, а не System.Stringтипом (або лише Stringпісля ви зробили using System;).

Це точка ніша , хоча, як , хоча bool, char, int, doubleі stringвсі ключові слова , псевдоніми типів систем, stringє непарних один вихід , як це контрольний тип і інші типи значень.


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

String використовується з простором імен System.String, рядок використовується специфікацією компілятора C #, крім того System.String є значенням опорного типу. Ви вважаєте за краще мати справу з системними об'єктами, рядком лише для літеральних цілей. І система, і система працюють однаково.

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

Рядок використовується також для порівняння, рівних та інших цілей.


4
це, здається, не пропонує нічого істотного за попередні 6 відповідей
gnat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.