Почему 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));
Ответы
Ответ 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);