Является ли Verbatim или выход из предпочтительного способа работы со строками, обогащенными кавычками, в C#?

Чтобы избежать или дословно, это мой вопрос.

Мне нужно программно отправить пару команд на принтер (Zebra QLn220) в C#, а именно:

! U1 setvar "power.dtr_power_off" "off"

-а также:

! U1 setvar "media.sense_mode" "gap"

Из-за обилия кавычек в этих командах я подумал, что было бы разумно использовать дословные строки. Но исходя из этого, мне все еще нужно удвоить кавычки, чтобы предположительно / теоретически это было бы примерно так:

string dontShutErOff = @"! U1 setvar """power.dtr_power_off""" """off"""";

... который выглядит как мэшап, состоящий из дона Кинга, кота из Coding Horror и Граучо Маркса.

Было бы лучше избежать кавычек таким образом:

string dontShutErOff = "! U1 setvar \"power.dtr_power_off\" \"off\"";

?

Должен ли я сбежать от Verbatimtraz?

ОБНОВИТЬ

Основываясь на первом предложении Эрика Липперта, как насчет этого:

const string quote = "\"";
string whatever = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);

4 ответа

Решение

Я бы рассмотрел третий вариант:

const string quote = "\"";
string whatever = "! U1 setvar " + 
                  quote + "power.dtr_power_off" + quote + " " +
                  quote + "off" + quote;

Или четвертый:

static string Quote(string x) 
{
    const string quote = "\""; 
    return quote + x + quote;
}
...
string whatever = "! U1 setvar " + Quote("power.dtr_power_off") + " " + Quote("off");

Все они имеют свои плюсы и минусы; никто не является явно лучшим.

Ресурсы могут быть лучшим подходом - похоже, вы планируете иметь константы C#, чтобы в любом случае иметь имена. Пусть автоматическая генерация ресурса создаст для вас константу C# при редактировании команд в виде обычного текста.

Строковые строки не допускают двойных кавычек, как вы описали в первом примере. Это не скомпилируется.

Я только что выяснил это на самом деле... Он поддерживает двойные двойные кавычки как кавычки. Итак, ваш первый пример будет выглядеть так:

string dontShutErOff = @"! U1 setvar ""power.dtr_power_off"" ""off""";

Однако, если ваши строковые литералы важны, вряд ли изменятся или, возможно, потребуется их перевод в будущем, я бы поместил их в файл ресурсов, как упоминалось в предыдущем ответе. Любое экранирование выполняется автоматически, и строка легко читается.

Ваша первая строка должна быть:

string dontShutErOff = @"! U1 setvar ""power.dtr_power_off"" ""off""";

Кавычки пишутся как двойные кавычки, а не как тройные.

Ни один из способов явно не лучше другого, по крайней мере, для кавычек. Это в основном дело вкуса. В других ситуациях тот или иной способ имеет явные преимущества, например, использование строки с разделителями @ для путей к файлам, которые содержат обратную косую черту.

Другие вопросы по тегам