Подтвердить что ты не робот

Почему Debug.WriteLine неправильно форматирует строки?

У меня есть следующий Debug.WriteLine:

Debug.WriteLine("Metadata Version: {0}", version); // update: version is a string

Вывод:

2.0: Версия метаданных: {0}

Почему строка отформатирована таким образом?

Я не видел ничего в документации MSDN, которая идентифицирует аргументы за этим форматом. Для получения корректно отформатированного вывода я должен сделать следующее:

Debug.WriteLine(string.Format("Metadata Version: {0}", version));
4b9b3361

Ответ 1

Так как version является string, вы нажимаете перегрузку WriteLine, которая принимает категорию как свой второй параметр.

Пока есть какое-то количество хаков, чтобы обойти это поведение (я включу несколько ниже, для удовольствия), я лично предпочел бы ваше решение как предпочтительный способ четко убедиться, что строка рассматривается как строка формата.

Некоторые другие хакерские обходные пути:

Debug.WriteLine("Metadata Version: {0}", version, "");
Debug.WriteLine("Metadata Version: {0}", (object)version);
Debug.WriteLine("Metadata Version: {0}", new[] { version });
Debug.WriteLine("Metadata Version: {0}", version, null);

Ответ 2

Так как ваш version является строкой, он использует перегрузку Debug.WriteLine(String, String).

Вы можете сделать пару вещей, чтобы получить правильный результат:

Debug.WriteLine("Metadata Version: {0}",(object) version);

Или вы можете использовать Debug.Print

Debug.Print("Metadata Version: {0}", version);

Ответ 3

Решает вызов метода эту перегрузку Debug.WriteLine, которая принимает строку сообщения как свой первый параметр и строку категории как второй параметр.

Если вы передадите параметр версии в System.Object, он решит желаемую перегрузку Debug.WriteLine, которая принимает строку формата как его первый параметр и один или несколько объектов в качестве последующих параметров.

Debug.WriteLine("Metadata Version: {0}", (object)version);