C#: символы (Characters)
Тип char (синоним System.Char ) представляет юникод символы и занимает 2 байта. Литералы char указываются внутри одинарных кавычек:
Управляющие последовательности (Escape sequences)
Символы, которые не могут быть переданы с помощью литералов, выражаются с помощью управляющих последовательностей:
Char | Значение | Юникод |
---|---|---|
\’ | Одиночная кавычка | 0x0027 |
\» | Двойная кавычка | 0x0022 |
\\ | Обратный слэш | 0x005C |
\0 | Null | 0x0000 |
\a | Alert | 0x0007 |
\b | Backspace | 0x0008 |
\f | Перевод страницы | 0x000C |
\n | Новая строка | 0x000A |
\r | Возврат каретки | 0x000D |
\t | Горизонтальный таб | 0x0009 |
\v | Вертикальный таб | 0x000B |
С помощью управляющей последовательности \u (или \x ) можно передать любой юникод символ, указав сразу после последовательности его четырехзначный шестнадцатеричный код:
Преобразование char
Тип char может быть автоматически (скрыто) преобразован в числовой тип, способный вместить бесзнаковый short . Для остальных числовых типов требуется явное приведение.
System.Char
В System.Char определен набор статических методов для работы с символами. Их можно вызвать через System.Char или его псевдоним char :
Методы ToUpper и ToLower преобразуют символ в верхний и нижний регистр соответственно. Они учитывают локаль конечного пользователя, что может приводит к неявным ошибкам. Методы ToUpperInvariant и ToLowerInvariant делают тоже самое, но без учета локали пользователя.
Также класс System.Char определяет ряд методов для категоризации символов:
- IsLetter — все буквы ( UpperCaseLetter , LowerCaseLetter , TitleCaseLetter , ModifierLetter , OtherLetter )
- IsUpper — буквы в верхнем регистре ( UpperCaseLetter )
- IsLower — буквы в нижнем регистре ( LowerCaseLetter )
- IsDigit — все цифры ( DecimalDigitNumber )
- IsLetterOrDigit — буквы и цифры (сумма IsLetter и IsDigit )
- IsNumber — все цифры, дроби Unicode и числовые символы латинского набора ( DecimalDigitNumber , LetterNumber , OtherNumber )
- IsSeparator — пробел и все символы разделителей Unicode ( LineSeparator , ParagraphSeparator )
- IsWhiteSpace — все разделители плюс \n , \r , \t , \f и \v ( LineSeparator , ParagraphSeparator )
- IsPunctuation — знаки пунктуации ( DashPunctuation , ConnectorPunctuation , InitialQuotePunctuation , FinalQuotePunctuation )
- IsSymbol — большинство других печатных символов ( MathSymbol , ModifierSymbol , OtherSymbol )
- IsControl — непечатные управляющие символы
Для категоризации символов также предназначен статический класс GetUnicodeCategory , он возвращает перечисление UnicodeCategory , члены которого приведены в скобках в списке выше.
char (Справочник по C#)
Ключевое слово типа char — это псевдоним для типа структуры System.Char .NET, представляющий символ UTF-16 в Юникоде.
Type | Диапазон | Размер | Тип .NET |
---|---|---|---|
char | От U+0000 до U+FFFF | 16 разрядов | System.Char |
Значение по умолчанию для типа char — \0 , то есть U+0000.
Тип char поддерживает сравнение, проверку равенства, а также операции инкремента и декремента. Кроме того, для операндов char арифметические и побитовые логические операторы выполняют операцию с соответствующими кодами символов и создают результат типа int .
Тип string представляет текст как последовательность значений char .
Литералы
Значение char можно указать следующим образом:
- символьный литерал;
- escape-последовательность Юникода, то есть символы \u , за которыми следует шестнадцатеричное представление кода символа из четырех символов;
- шестнадцатеричная escape-последовательность, то есть символы \x , за которыми следует шестнадцатеричное представление кода символа.
var chars = new[] < 'j', '\u006A', '\x006A', (char)106, >; Console.WriteLine(string.Join(" ", chars)); // output: j j j j
Как показано в предыдущем примере, можно также привести значение кода символа к соответствующему значению char .
В случае escape-последовательности Юникода необходимо указать все четыре шестнадцатеричные цифры. То есть \u006A — допустимая escape-последовательность, а \u06A и \u6A нет.
В случае шестнадцатеричной escape-последовательности начальные нули можно опустить. То есть \x006A , \x06A и \x6A — допустимые escape-последовательности, соответствующие одному символу.
Преобразования
Тип char неявно преобразуется в следующие целочисленные типы: ushort , int , uint , long и ulong . Он также может быть неявно преобразован во встроенные числовые типы с плавающей запятой: float , double и decimal . Он явно преобразуется в целочисленные типы sbyte , byte и short .
Неявные преобразования из других типов в тип char не предусмотрены. Но любой целочисленный тип или числовой тип с плавающей запятой явно преобразуется в char .
Спецификация языка C#
Дополнительные сведения см. в разделе Целочисленные типы в статье Спецификации языка C#.
См. также
Справочник по C#
Этот раздел содержит подробные справочные сведения о ключевых словах, операторах, специальных символах, директивах препроцессора, параметрах компилятора и ошибках и предупреждениях компилятора в среде C#.
Ключевые слова в C#
Ссылки на сведения о ключевых словах и синтаксисе языка C#.
Операторы в C#
Ссылки на сведения об операторах и синтаксисе языка C#.
Специальные символы в C#
Предоставляет ссылки на сведения о специальных контекстные символов в C# и их использовании.
Директивы препроцессора C#
Ссылки на сведения о командах компилятора для внедрения в исходном коде C#.
Параметры компилятора C#
Сведения о параметрах компилятора и их использовании.
Ошибки компилятора C#
Фрагменты кода, демонстрирующие причины и способы исправления ошибок и предупреждений компилятора C#.
Спецификация языка C#
Спецификация языка C# версии 6.0 Это черновой вариант для языка C# версии 6.0. Этот документ будет пересмотрен в рамках работы с комитетом по стандартам C# ECMA. Версия 5.0 была выпущена в декабре 2017 г. как стандартный 5-й выпуск ECMA-334.
Возможности, которые были реализованы в языке C# версий более поздних чем 6.0, представлены в предложениях по спецификации языка. В этих документах описываются изменения спецификации языка, связанные с добавлением новых функций. Это черновой вариант для формы. Эти спецификации будут улучшены и отправлены в комитет по стандартам ECMA для официального анализа и внедрения в будущую версию стандарта C#.
Предложения по спецификации C# 7.0
В версии C# 7.0 реализован ряд новых возможностей, включая сопоставления шаблонов, локальные функции, объявления выходной переменной, выражения throw, двоичные литералы и разделители между цифрами. Эта папка содержит спецификации для каждой из этих функций.
Предложения по спецификации C# 7.1
В версию C# 7.1 добавлено несколько новых возможностей. Можно написать метод Main , возвращающий Task или Task . Это позволяет добавлять модификатор async в метод Main . Выражение default можно использовать без типа в тех расположениях, где возможен вывод типа. Кроме того, появилось еще одно дополнительное усовершенствование: вывод имен элементов кортежа. И, наконец, сопоставление шаблонов можно использовать с универсальными шаблонами.
Предложения по спецификации C# 7.2
В версию C#7.2 добавлен ряд простых функций. С помощью ключевого слова in можно передавать аргументы по ссылке только для чтения. Внесен ряд незначительных изменений для поддержки безопасности во время компиляции для Span и связанных типов. В некоторых ситуациях можно использовать именованные аргументы, если следующие за ними аргументы являются позиционными. Модификатор доступа private protected позволяет указывать, что вызывающие объекты ограничены производными типами, реализованными в той же сборке. Оператор ?: можно использовать для разрешения в ссылку на переменную. С помощью разделителя начальных цифр можно форматировать шестнадцатеричные и двоичные числа.
Предложения по спецификации C# 7.3
Версия C# 7.3 является очередным промежуточным выпуском, содержащим несколько небольших обновлений. К параметрам универсальных типов можно применять новые ограничения. Другие изменения упрощают работу с полями fixed , включая использование выделений stackalloc . Локальные переменные, объявленные с ключевым словом ref , можно переназначать для указания на новое хранилище. Можно применять атрибуты к автоматически реализуемым свойствам, предназначенным для созданного компилятором резервного поля. Переменные выражений можно использовать в инициализаторах. Кортежи можно проверять на равенство (или неравенство). Кроме того, были внесены некоторые улучшения в разрешение перегрузки.
Предложения по спецификации C# 8.0
Версия C# 8.0 доступна для .NET Core 3.0. В число возможностей входят использование ссылочных типов, допускающих значения NULL, рекурсивное сопоставление шаблонов, методы интерфейса по умолчанию, асинхронные потоки, диапазоны и индексы, использование шаблонов и объявлений using, назначение объединения со значением NULL и члены экземпляров с доступом только на чтение.
Предложения по спецификации C# 9
Версия C# 9 доступна для .NET 5. Предлагаемые функции включают записи, инструкции верхнего уровня, усовершенствованное сопоставление шаблонов, методы задания только для инициализации, выражения new с целевым типом, модульные инициализаторы, расширение методов partial, статические анонимные функции, условные выражения с целевым типом, ковариантные типы возвращаемого значения, метод расширения GetEnumerator в циклах foreach, пустые переменные в качестве параметров лямбда-выражений, атрибуты для локальных функций, целочисленные значения с системным размером, указатели на функцию, подавляемое порождение флага localsinit и аннотации для параметров неограниченного типа.
Предложения по спецификации C# 10
Версия C# 10 доступна для .NET 6. Предлагаемые функции включают структуры записи, конструкторы структур без параметров, глобальные директивы «using», пространства имен на уровне файлов, шаблоны расширенных свойств, улучшенные интерполированные строки, постоянные интерполированные строки, улучшения функции лямбда, поддержку атрибута сведений о вызывающем выражении аргумента, расширенные директивы #line , универсальные атрибуты, улучшенный анализ определенного присваивания и переопределение AsyncMethodBuilder .
Связанные разделы
Использование среды разработки Visual Studio для C#
Ссылки на концептуальные разделы и разделы задач, описывающие интегрированную среду разработки и редактор.
Руководство по программированию на C#
Сведения об использовании языка программирования C#.