Debug.Print vs. Debug.WriteLine
В чем разница между Debug.Print
и Debug.WriteLine
? Резюме обоих в MSDN одинаково:
Записывает сообщение, сопровождаемое терминатором строк, в прослушиватели трассировки в коллекции Listeners.
Debug.WriteLine
имеет больше перегрузок. Я не вижу причины, по которой Debug.Print
будет использоваться вместо Debug.WriteLine
?
Ответы
Ответ 1
Они оба делают одно и то же, но интересно, что Debug.Print
будет принимать только строку, а Debug.WriteLine
примет объект, который заканчивается вызовом метода ToString
.
С рефлектором:
[Conditional("DEBUG")]
public static void Print(string message){
TraceInternal.WriteLine(message);
}
[Conditional("DEBUG")]
public static void WriteLine(string message){
TraceInternal.WriteLine(message);
}
[Conditional("DEBUG")]
public static void WriteLine(object value)
{
TraceInternal.WriteLine(value);
}
Я хотел бы поспорить, что Debug.Print
был удержанием от Visual Basic.
Изменить: Из учебника Отслеживание приложения VB.NET Windows:
В Visual Basic.NET 2005 Debug.Write, Debug.WriteIf, Debug.WriteLine и Debug.WriteLineIf методы были заменены Доступный метод Debug.Print в более ранних версиях Visual Basic.
Уверенные звуки, такие как Debug.Print
, были удержаны из pre- C#
дней.
Ответ 2
Debug.Print
и Debug.WriteLine
каждый предлагает перегрузку, которая принимает один строковый параметр. Внутри эти однопараметрические методы работают одинаково и вызывают этот метод:
TraceInternal.WriteLine(message);
Разница между двумя методами заключается в том, что Debug.Print
предлагает перегрузку с двумя аргументами: Debug.Print(String, Object[])
. Эта перегрузка Print
может отображать форматированную строку. Нет перегрузки Debug.WriteLine
, который предлагает эту функциональность, но вы можете, конечно, использовать:
Debug.WriteLine(string.Format())
WriteLine
был представлен в .NET Framework 1.1 и Print
в Framework 2.0. На мой взгляд, Microsoft должна была остаться с WriteLine
в качестве имени метода и добавить перегрузку WriteLine(String, Object[])
вместо добавления метода Print
.
Ответ 3
Они не хотели рисковать сломать язык .NET, который считает обе перегрузки неоднозначными. Они почти совпадают, WriteLine ( "foo" ) может соответствовать WriteLine (string) и WriteLine (string, params object []). У С# есть правило для него, но это специфично для этого языка.
Ответ 4
Из прототипов:
public static void Print(string message);
public static void Print(string format, params object[] args);
public static void WriteLine(object value);
public static void WriteLine(string message);
Похоже, что Print может форматировать строки, а WriteLine может сбрасывать объекты.