«Слишком много символов в символьной буквальной ошибке» - PullRequest
45 голосов
/ 09 апреля 2011

Я борюсь с куском кода и получаю ошибку:

Слишком много символов в символьной ошибке

Использование C # и оператора switch для итерации по строковому буферу и чтения токенов, но с ошибкой в ​​этой строке:

case '&&':

case '||':

case '==':

Как мне сохранить == и && как символ?

Ответы [ 5 ]

92 голосов
/ 09 апреля 2011

Это потому, что в C # одинарные кавычки ('') обозначают (или инкапсулируют) один символ, а двойные кавычки ("") используются для строки символов.Например:

var myChar = '=';

var myString = "==";
4 голосов
/ 09 апреля 2011

Вот пример:

char myChar = '|';
string myString = "||";

Символы разделяются одинарными кавычками, а строки - двойными кавычками.

Хорошая новость - операторы C # switch работают со строками!

switch (mytoken)
{
    case "==":
        //Something here.
        break;
    default:
        //Handle when no token is found.
        break;
}
2 голосов
/ 09 апреля 2011

Символ может содержать только один символ, символьный литерал - это один символ в одинарных кавычках, т.е. '&' - если у вас больше символов, чем один, вы хотите использовать строку, для этого вам нужно использовать двойные кавычки :

case "&&": 
2 голосов
/ 09 апреля 2011

Вы не можете рассматривать == или || как символы, так как они не являются символами, а представляют собой последовательность символов.

Вы можете сделать так, чтобы ваш переключатель ... вместо этого работал со строками.

1 голос
/ 09 апреля 2011

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

== - это значение Unicode 2A76, поэтому я верю, что вы можете сделать это:

char c = '\u2A76';

Сейчас я не могу проверить это, но мне было бы интересно узнать, работает ли это для вас.

Тебе нужно будет покопаться в поисках остальных. Вот таблица Unicode, если вы хотите посмотреть:

http://www.tamasoft.co.jp/en/general-info/unicode.html

...