4

我认为这是一个常见问题,但我似乎在 SO 或谷歌上找不到任何东西。

是否可以仅格式化单个参数。例如,格式化string foo = "{0} is {1} when {2}";以使其返回 read "{0} is cray when {2}"?

意图:
我正在尝试格式化字符串,同时覆盖一个方法,然后在它的基本方法中格式化它

成功
感谢这个答案,所有答案都有帮助:)。

该单元测试有效:

string foo = String.Format("{0} is {1} when {2}", "{0}", "cray", "{2}");
Assert.AreEqual("{0} is cray when {2}", foo);
string bar = string.Format(foo, "this", null, "it works");
Assert.AreEqual("this is cray when it works", bar);
4

2 回答 2

6

从表面上看你的问题,我想你可以做到以下几点:

string foo = String.Format("{0} is {1} when {2}", "{0}", "cray", "{2}");

也就是说,只需将每个未评估的格式项替换为自身即可。

于 2012-12-03T00:15:35.473 回答
2

不,这是不可能的。 String.Format将尝试替换每个带括号的占位符。如果您没有提供正确数量的参数,则会引发异常。

我不确定您为什么要这样做,但是如果您希望输出看起来像那样,则必须转义括号

var foo = String.Format("{{0}} is {0} when {{1}}", "cray");
// foo is "{0} is cray when {1}"

也许如果你告诉我们你到底想做什么,我们就能更好地帮助你。

于 2012-12-03T00:11:19.420 回答