在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, "");
但这些看起来都不是很优雅。
答案 0 :(得分:6)
试试这个:
Debug.WriteLine("The path is {0}", (object)myObj.myPath);
答案 1 :(得分:4)
这有点烦人。是的,还有更好的方法。我使用Debug.Print
(docs),它具有相同的效果但更少的重载。当您将两个字符串传递给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);