2009-07-28 3 views
0

Так что у меня этот код:Что может вызвать 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%

Любая идея, что могло бы привести к тому, что круглые скобки все перепутались?

Чтобы добавить (или, возможно, объяснить?) Странность: th проблема не возникает на моей машине разработки, используя Windows XP. Строка отображается как ожидалось. Проблема возникает на наших производственных машинах (с использованием того же кода), используя Windows Server 2008.

+0

Как вы выводите «flipsMessage»? – David

+0

Очень странно - я не вижу такого поведения. –

+0

Должно быть что-то еще для этой проблемы, как утверждает Дэвид, это может быть связано с тем, как вы выводите строку или, возможно, строку формата загружается из другого места или каким-то образом искажается. –

ответ

0

hmmm Я бы предположил, что у вас есть карету-возврат, прокрадывающийся где-то.

+0

Возврат каретки не объясняет ведущий «' '' '' на выходе. –

+0

Я догадался, что он неверно набрал ведущий ")" – Jimmy

+0

, но я думаю, вы правы, просто a \ r заменит F – Jimmy

3

Как об этом:

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

Я подозреваю, что вы что-то неправильное ... в вашем примере, не только одна из скобок перемещаются в начало, но замыкающая parenetheses была заменена отверстием скобки ... Мое лучшее предположение, основанное на минимальных данных, которые вы представляете, это то, что вы показываете, генерируется фрагментом кода в другом месте вашего решения, которое вы не смотрите ... Я бы тщательно прошел код, в режиме отладки, по очереди, и убедитесь, что эта строка фактически является той, которая выдает отображаемое значение.

Также остановите и посмотрите, что значение переменной flipsMessage оценивается в режиме отладки.

1

Я собираюсь предположить, что вы выводите это сообщение на какой-то экранный элемент управления, свойство MaxLength которого имеет ту же длину, что и ваше сообщение (или, возможно, DataTable с типом столбца с MaxLength). Однако, прежде чем сообщение выйдет, вся строка иногда окружена круглыми скобками.

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 

На некоторых машинах эти дополнительные скобки не добавляются, поэтому у вас нет проблемы. Я понятия не имею, почему это будет отличаться от машины к машине.