C # используя константную строку внутри друг друга с параметрами - PullRequest
0 голосов
/ 07 мая 2018

Для этой конкретной необходимости у меня есть две строки const, содержащие параметры, например:

private const string myString = "The operation #{0} has been completed successfully in {1} seconds";

Этот тип константы, конечно, позже используется с String.Format () для генерации сообщений обратной связи.

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

private const string shortFormat = "operation {0} out of {1}";
private const string longFormat = "During step one, an error was encountered on operation {0} out of {1}, and during step two, an error was encountered on operation {2} out of {3}";

Вы можете увидеть очевидную избыточность здесь. Одна из констант используется дважды внутри второй буквально для той же цели, только для большей картины.

Если бы он использовался только один раз, я мог бы использовать его снова так:

private const string shortFormat = "operation {0} out of {1}";
private const string longFormat = "During step one, an error was encountered on " + shortFormat + " so the process has not completed step two.";

Это выглядело бы намного лучше. Но я не знаю, как использовать его дважды, как в первом примере. Если я просто дважды вставлю shrotFormat, то дублирую параметры 0 и 1, поэтому строка во время выполнения будет выглядеть так:

"During step one, an error was encountered on operation {0} out of {1}, and during step two, an error was encountered on operation {0} out of {1}"

Который явно не будет работать с 4 различными параметрами в строке. Формат ()

Как я могу сделать так, чтобы это не повторялось, при этом все четыре номера параметров были разными и могли использоваться с 4 значениями?

1 Ответ

0 голосов
/ 07 мая 2018

Вы могли использовать string.Format несколько раз:

private const string stepFormat= "operation {0} out of {1}";
private const string twoStepMessage = "During step one, an error was encountered on {0}, and during step two, an error was encountered on {1}";

public string CreateMessage(int s1, int s1total, int s2, int s2total)
{
    string stepOne = string.Format(stepFormat, s1, s1total);
    string stepTwo = string.Format(stepFormat, s2, s2total);
    return string.Format(twoStepMessage, stepOne, stepTwo);
}

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

...