Почему существуют строчные и строчные версии строки, и что я должен использовать?
Хорошо, это может быть глупый вопрос, но я не смог найти на нем никакой информации.
Являются ли String.Empty и string.Empty одинаковыми? Я всегда оказываюсь тяготеющим к использованию версии верхнего регистра (String.Empty), потому что я предпочитаю цвет и внешний вид его в моей среде IDE, чем версия в нижнем регистре (string.Empty)...
Есть ли "правильный" способ использования этих, которые отличаются или полностью зависят от личных предпочтений? Это было мое предположение, что они оба одинаковы, но, честно говоря, я никогда не думал об этом, пока по какой-то причине сегодня я не подумал: "Если они оба существуют, они оба должны существовать по какой-то причине".
Есть ли причина, о которой все знают? Если так, то, что это? Может ли кто-нибудь просветить меня?
P.S. "Точные дубликаты" отвечают только на половину вопроса - "что правильно?", А не "почему они оба существуют?"
Точный дубликат: В чем разница между строкой и строкой в С#?
Точный дубликат: Строка vs string в С#
Ответы
Ответ 1
В С# имена нижних регистров являются псевдонимами для имен типов System.xxx
, например. string
равно System.String
и int
равно System.Int32
.
Лучше всего использовать эти языковые псевдонимы для имен типов, а не их эквивалентную структуру, ради последовательности. Поэтому вы делаете это неправильно.; -)
По той причине, что они оба существуют, существуют типы .NET, поскольку они определены в независимом от языка стандарте для библиотек .NET, называемых CTS (система общего типа). Почему С# определяет, что эти псевдонимы находятся вне меня (VB делает что-то очень похожее). Я думаю, что две причины:
- Привычка. Попросите всех этих программистов на C и Java использовать С#, указав одинаковые имена типов для некоторых основных типов.
- Лень: вам не нужно импортировать пространство имён
System
, чтобы использовать их.
EDIT. Поскольку многие люди предпочитают другие обозначения, позвольте мне отметить, что это отнюдь не необоснованно. Хороший случай действительно может быть сделан для использования имен типа CTS, а не для ключевых слов С#, и некоторые другие аргументы, представленные на поверхностном уровне, предлагаются в других ответах. С точки зрения чистоты/стиля я, вероятно, соглашусь.
Однако подумайте, стоит ли нарушать хорошо установленный договор, который помогает унифицировать код между проектами.
Ответ 2
Это концептуально похоже на что-то вроде этого:
using int=System.Int32
Ответ 3
Строка сопоставляется с классом String AFAIK, поэтому они одинаковы.
То же самое верно для, например, для int и Int32.
Ответ 4
Они оба одинаковы.
Лично я предпочитаю использовать строчную строчку, "синюю", используя ключевое слово С# вместо имени класса .NET по той же причине, что и я использую int вместо Int32.
Кроме того, нижний регистр не требует включения пространства имен System...
Ответ 5
Лично я предпочитаю использовать String, поскольку как String, так и Object являются ссылками, тогда как все остальные базовые типы являются типами значений. На мой взгляд, это самое четкое разделение.