Быстрый вопрос. Почему обе строки ниже действительны?
char x = '\"';
char y = '"';
Если "- специальный символ, разве вторая строка не должна быть помечена как неправильная?"
2 ответа
Если "- специальный символ, разве вторая строка не должна быть помечена как неправильная?"
Нет, потому что правила языка не требуют экранирования "
внутри символьного литерала, только внутри строкового литерала.
Однако в любом случае рекомендуется разрешить его экранировать. Таким образом, существует один набор управляющих последовательностей, который применяется как к символьным, так и к строковым литералам, хотя \U........
не сработает для любой кодовой точки, которая не представлена одной единицей кода UTF-16.
Разница заключается в разделе 2.4.4.5 спецификации C # (строковые литералы), где одиночный-обычный-строковый-буквальный-символ :
Любой символ, кроме "(U + 0022), \ (U + 005C) и символа новой строки
По сравнению с разделом 2.4.4.4 (символьные литералы), где односимвольное производство:
Любой символ, кроме '(U + 0027), \ (U + 005C) и символа новой строки
Как видите, для '
ситуация противоположная:
string x = "'";
string y = "\'";
Console.WriteLine(x == y); // Strings are equivalent
Вам нужна только escape-последовательность, когда чистое значение будет неоднозначным. Escape Sequence - это способ сказать: компилятор, игнорируйте его для понимания синтаксиса. Примите это как чистую ценность.
String s = """; //It would be unclear for the Compiler where the String ends and what is part of it. Hence Escape Sequencs are needed
char c = '"'; //It is clear where the Char starts and ends (the single Quotes).
char c = '''; //again unclear what of those is the Char. Escape Sequence needed.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.