如何在不使用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}有一些无效文本”
答案 0 :(得分:12)
只需在您的函数中调用String.Format
:
string output = String.Format(message, parameters);
答案 1 :(得分:7)
您可能需要两个方法:
public void LogErrors(string message, params string[] parameters)
{
LogErrors(string.Format(message, parameters));
}
public void LogErrors(string message)
{
// Use methods with *no* formatting
}
我不会只使用params
的单一方法,因为它会尝试应用格式化,即使你没有任何参数,也可以制作东西如果你想在没有任何参数的简单消息中使用“{”和“}”,那就更难了。
答案 2 :(得分:2)
基本上使用String.Format()方法:
public void LogError(string format, params string[] errorMessages)
{
log.WriteError(String.Format(
CultureInfo.InvariantCulture,
format,
errorMessages));
}