Сообщение, которое вы получаете при наведении мыши на эту часть кода: "\"
в этой строке:
if (data[i] == "\" && data[i-1] == "\")
на самом деле не является ошибкой, но комментарий/описание класса String
.
Обратная обратная косая черта используется для обозначения escape sequence. В документации указывается:
Комбинации символов, состоящие из обратного слэша (\), сопровождаемого буквой или комбинацией цифр, называются «escape-последовательностями». Чтобы представить символ новой строки, одинарный кавычек или некоторые другие символы в символьной константе, вы должны использовать escape-последовательности. Управляющая последовательность рассматривается как один символ и поэтому является действительной в качестве символьной константы.
Путаница возникает, потому что компилятор считает, что вы хотите иметь "
как символ в строке при использовании \"
. Вот почему intellisense по-прежнему отмечает остальную часть линии в цвете string
до момента, когда он находит "
без обратной косой черты перед ним.
Вы можете использовать оператор @
, чтобы заставить строку, которая будет интерпретироваться, как это, так что обратная косая черта будет просто персонаж:
if (data[i] == @"\" && data[i-1] == @"\")
и ваш код становится компилируется.
К сожалению, ваша петля будет разбиваться на первую итерацию, когда i
равно 0. Поскольку data
не будет индексироваться с -1. Я бы предложил другой подход, если ваша задача - разместить пробел между двумя последовательными обратными косыми чертами.
Вы можете использовать просто Replace
метод как это:
string s = @"\(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)";
s = s.Replace(@"\\", @"\ \");
Я не совсем понимаю, какую роль играет data
массив в вашем коде, но вы также можете сделать это с StringBuilder
StringBuilder builder = new StringBuilder();
builder.Append(@" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)");
builder.Replace(@"\\", @"\ \");
Ваш код даже не компилируется. '\' означает escape sequnce и '\" 'на самом деле способ избежать двойных кавычек. Поскольку синтаксическая раскраска в самом вопросе показывает,' '\ '&& data [i-1] ==" 'является исполнительным одиночным строка –