Debug.Print与Debug.WriteLine

时间:2011-03-23 21:42:56

标签: c# debugging

Debug.PrintDebug.WriteLine之间有什么区别? MSDN中的两者摘要都是相同的:

  

将一个消息后跟一个行终止符写入Listeners集合中的跟踪侦听器。

Debug.WriteLine有更多重载。我看不出为什么会使用Debug.Print代替Debug.WriteLine

的原因

4 个答案:

答案 0 :(得分:29)

它们都做同样的事情,但有趣的是Debug.Print只接受一个字符串,而Debug.WriteLine将接受一个最终调用对象的ToString方法的对象。

使用Reflector:

[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的延续。

编辑:来自Tracing VB.NET Windows Application的教程:

  

在Visual Basic.NET 2005中,   Debug.Write,Debug.WriteIf,   Debug.WriteLine和Debug.WriteLineIf   方法已经被替换了   Debug.Print方法可用   在早期版本的Visual Basic中。

当前Debug.Print天之前的C#听起来似乎是一种拖延。

答案 1 :(得分:8)

Debug.PrintDebug.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方法。

答案 2 :(得分:2)

他们不想冒险破坏认为两种重载都不明确的.NET语言。它们非常接近,WriteLine(“foo”)可以匹配WriteLine(string)和WriteLine(string,params object [])。 C#有一个规则,但这是特定于那种语言的。

答案 3 :(得分:1)

来自原型:

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可以转储对象。