У меня есть такая строка
'Name.ToLower().Contains ("") And Created < ("05/12/2022 01:41:16") And Disabled == false'
Как с этим бороться на С#?
Я пытался добавить @""" и т. д.
Я могу использовать С# 11, что нет проблем, я делаю это прямо сейчас :)
Отвечает ли это на ваш вопрос? Экранирование двойных кавычек в строке C#





var a = @"'Name.ToLower().Contains ("""") And Created < (""05/12/2022"") And ExpandOnStart == false'";
как это?
Привет, я не могу изменить строку, пока она не будет в переменной, поэтому нужно попробовать использовать строку как есть? Спасибо.
экранирование с помощью \ плохо, это гораздо менее читабельно. @fuzzybear то, что ты говоришь, не имеет смысла. Чтобы установить его, очевидно, вам нужно написать строковый литерал в исходном коде, и если вы можете изменить исходный код, вы можете изменить строковый литерал.
@fuzzybear да, тогда я понятия не имею, что ты пытаешься сделать. Вам нужно будет отредактировать свой вопрос, чтобы было более ясно, в чем заключается ваша настоящая проблема.
Привет, правильно я упростил вопрос
@fuzzybear обновлен на основе вашей скрипки dotnet...
Круто, именно так, большое спасибо
Очевидно, вам нужно как-то избегать специальных символов. В старом C# используйте дословные строки: https://dotnetfiddle.net/8OtiKP
@"'Name.ToLower().Contains ("""") And Created < (""05/12/2022"") And ExpandOnStart == false'"
Как видите, " по-прежнему нужно экранировать с помощью "", но все остальные символы, включая \, можно оставить как есть.
В C#11 есть лучшее решение: необработанный строковый литерал, где вообще не нужно экранировать "
"""'Name.ToLower().Contains ("") And Created < ("05/12/2022 01:41:16") And Disabled == false'"""
Это немного другой подход, но вы упомянули, что строка создается путем добавления других строк, поэтому, возможно, это поможет.
var createdDate = "05/12/2022";
var name = "some name";
var expandOnStart = "false";
var theString = $"Name.ToLower().Contains(\"{name}\") And Created < (\"{createdDate}\") And ExpandOnStart == \"{expandOnStart}\"";
// theString = Name.ToLower().Contains("some name") And Created < ("05/12/2022") And ExpandOnStart == "false"
https://dotnetfiddle.net/oq3UYq
Привет, спасибо за то, что строка изначально похожа на эту «Name.ToLower(). поместить это в var сначала в идеале?
Откуда вы берете строку? Возможно, вставка его в С# напрямую - не лучшее решение - например. если это в csv, может быть лучше читать из файла и программно избегать экранирования кавычек при чтении ввода
Я считаю, что множественные кавычки — это предварительный просмотр C# 11, поэтому, если вы явно не используете C# 11 для своего кода, я не думаю, что это сработает.