Debug.WriteLine重载似乎冲突

时间:2013-08-12 15:01:52

标签: c# .net overloading

在C#.Net中,System.Diagnostics.Debug.WriteLine有几个重载,包括这两个:

//http://msdn.microsoft.com/en-us/library/cc190153.aspx
public static void WriteLine(string format, params Object[] args);

//http://msdn.microsoft.com/en-us/library/1w33ay0x.aspx
public static void WriteLine(string message, string category);

我打算用第一个来打电话:

Debug.WriteLine("The path is {0}", myObj.myPath);

但看起来我实际上是在调用第二个重载,因为它是一个更精确的匹配。

有没有一种简单的方法来表明我想要第一个?

到目前为止,我最好的尝试是:

Debug.WriteLine("The path is {0}", new object[]{myObj.myPath});
Debug.WriteLine("The path is {0}", myObj.myPath, "");

但这些看起来都不是很优雅。

5 个答案:

答案 0 :(得分:6)

试试这个:

Debug.WriteLine("The path is {0}", (object)myObj.myPath);

答案 1 :(得分:4)

这有点烦人。是的,还有更好的方法。我使用Debug.Printdocs),它具有相同的效果但更少的重载。当您将两个字符串传递给WriteLine并转换为object并且输入更少时,这比尝试查看更容易。例如:

Debug.Print("The path is {0}", myObj.myPath);

答案 2 :(得分:1)

您可以避免使用重载,只需传递格式化字符串:

Debug.WriteLine(string.Format("The path is {0}", myObj.myPath));

答案 3 :(得分:1)

对于像我这样的惰性打字机,我只是使用

System.Diagnostics.Debug.Writeline("Hello {0}", "World", 1);

额外参数强制正确过载,并且完全是良性的。

答案 4 :(得分:0)

  

我打算用第一个来打电话:

第一个没有被调用,因为字符串显式重载优先。这就是MSDN对它的评价。

  

此方法语法中的paramskeyword   暗示对象数组可以是单个值。例外   这是String对象。显式重载优先,所以a   单个字符串的arg值将默认为   Debug.WriteLine(String,String)重载。

所以为了调用第一个你必须将它转换为object,以便显式重载不会优先。

Debug.WriteLine("The path is {0}", (object)myObj.myPath);