可能导致String.Format意外移动字符的原因是什么?

时间:2009-07-28 19:19:01

标签: .net string.format

所以我有这段代码:

/* variables already initialized:
   int numFlips
   int numAggrFlips
   double pctAggrFlips
*/

String flipsMessage = String.Format(
    "Flips: {0} / Aggr: {1} ({2})",
    numFlips, numAggrFlips, pctAggrFlips.ToString("0.0%")
);

出于某种神秘的原因,输出结果是以下字符串:

  

(翻转:0 / Aggr:0(0.0%

任何想法会导致括号如此混乱?

添加(或者可能解释?)奇怪性:使用Windows XP在我的开发机器上不会出现此问题。字符串按预期显示。使用Windows Server 2008在我们的生产机器上(使用相同的代码)确实会出现问题。

4 个答案:

答案 0 :(得分:3)

这个怎么样:

String flipsMessage = String.Format(
    "Flips: {0} / Aggr: {1} ({2:P})",
    numFlips, numAggrFlips, pctAggrFlips
);

答案 1 :(得分:2)

我怀疑你是在误读某些东西......在你的例子中,不仅是一个括号移到了开头,而且一个闭合的parenetheses被一个开头的括号所取代......我最好的猜测基于最小的数据您提出的是您正在显示的输出是由解决方案中您未查看的其他位置的代码片段生成的...我会仔细逐步调试代码,在调试模式下逐行,并确保这一行实际上就是输出显示值的那一行。

另外,停止,看看变量flipsMessage在调试模式下的值是多少。

答案 2 :(得分:1)

我猜你将这个消息输出到某种屏幕控制,其MaxLength属性设置为与消息相同的长度(或者可能是具有MaxLength的列类型的DataTable)。但是,在输出消息之前,整个字符串有时会被括号括起来。

flipsMessage = Flips: 0 / Aggr: 0 (0.0%) // length: 25
flipsWParens = (Flips: 0 / Aggr: 0 (0.0%)) // length: 27
flipsTrunced = (Flips: 0 / Aggr: 0 (0.0% // length: 25

在某些机器上,这些额外的括号不会被添加,所以你没有问题。我不知道为什么它会因机器而异。

答案 3 :(得分:0)

嗯,我猜你在某个地方偷回了马车。