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

Debug.Print vs. Debug.WriteLine

В чем разница между Debug.Print и Debug.WriteLine? Резюме обоих в MSDN одинаково:

Записывает сообщение, сопровождаемое терминатором строк, в прослушиватели трассировки в коллекции Listeners.

Debug.WriteLine имеет больше перегрузок. Я не вижу причины, по которой Debug.Print будет использоваться вместо Debug.WriteLine?

4b9b3361

Ответ 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 может сбрасывать объекты.