【发布时间】:2019-08-29 14:56:48
【问题描述】:
C#string.Format 方法是否有一个格式字符串,可以从相应的参数中选择一个子字符串?像这样:
var lang1 = "EN";
var lang2 = "FR";
var shortFormat = "Foo-{0:0-0}.pdf";
var longFormat = "Foo-{0:0-1}.pdf";
string.Format(shortFormat, lang1) // Foo-E.pdf
string.Format(shortFormat, lang2) // Foo-F.pdf
string.Format(longFormat, lang1) // Foo-EN.pdf
string.Format(longFormat, lang2) // Foo-FR.pdf
预测几个 cmets:是的,我知道 Substring 方法。我也读过 string.Format 比简单的 Substring 慢。上面的例子被大大简化了。假设 string.Format 语句位于一个位置,而 lang1/lang2 参数是来自另一个位置的输入,而 shortFormat/longFormat 是在 resx 文件中定义的。
也就是说,在要定义格式的地方,我们对被格式化的值(示例中的 lang1/lang2)一无所知,也没有任何方法可以执行 C# 代码。因此我们不能在值上调用任何方法,例如Substring。在格式化代码运行的地方,反过来,我们将格式作为参数,所以我们不能简单地对值执行Substring,因为我们不知道格式是否需要它(除非如果我们检查格式)。
【问题讨论】:
标签: c# string-formatting