Параметризация строки в .NET C # - PullRequest
4 голосов
/ 23 сентября 2011

Как заменить сигнатуру метода для приема параметризованных строк без использования ключевых слов param. Я видел эту функциональность в Console.WriteLine (). например

public void LogErrors(string message, params string[] parameters) { }

Сценарий:

У меня есть ошибка входа в систему с именем

LogErrors(string message)
{
    //some code to log errors
}

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

LogError("Line number " + lineNumber + " has some invalid text");

Я собираюсь переместить эти сообщения об ошибках в файл ресурсов, поскольку позже я могу изменить язык (локализацию) программы. В таком случае, как я могу запрограммировать прием параметризованных строк в фигурных скобках? e.g.:

LogError("Line number {0} has some invalid text", lineNumber)

будет записано как:

LogError(Resources.Error1000, lineNumber) 

где Error1000 будет «Номер строки {0} содержит недопустимый текст»

Ответы [ 3 ]

12 голосов
/ 23 сентября 2011

Просто позвоните String.Format в вашей функции:

string output = String.Format(message, parameters);
7 голосов
/ 23 сентября 2011

Вы, вероятно, хотите два метода:

public void LogErrors(string message, params string[] parameters)
{
    LogErrors(string.Format(message, parameters));
}

public void LogErrors(string message)
{
    // Use methods with *no* formatting
}

I не будет просто использовать один метод с params, так как тогда он будетпопробуйте применить форматирование, даже если у вас нет параметров, что может усложнить задачу, если вы хотите использовать "{" и "}" в простом сообщении без каких-либо параметров.

2 голосов
/ 23 сентября 2011

В основном используйте String.Format () метод:

public void LogError(string format, params string[] errorMessages)
{
   log.WriteError(String.Format(
                          CultureInfo.InvariantCulture, 
                          format, 
                          errorMessages));
}
...