在.NET C#中参数化字符串

时间:2011-09-23 14:59:39

标签: c# .net string

如何在不使用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 个答案:

答案 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));
}