在调试我的应用程序时,遇到了一个我不解的行为。我有以下
foreach (var customer in _dbContext.Customer)
{
Debug.WriteLine("Customer Name: {0}", customer.Name); // The output was not what I expected.
...
}
Peter:客户名称:{0}
但是,如果我将语句重写为此。
foreach (var customer in _dbContext.Customer)
{
Debug.WriteLine("Customer Name: " + customer.Name);
...
}
客户名称:Peter
我将以下代码添加到同一文件中,以查看原始代码为何无法正常工作。
string first = "Peter";
string last = "Piper";
string what = "pick";
Debug.WriteLine("1 {0} 2 {1}, 3 {0} 4 {1}, 5 {2}.", first, last, what);
1彼得2派珀,3彼得4派珀,5顺位。
我不确定Debug.WriteLine("Customer Name: {0}", customer.Name);
为什么会输出此CusPeter:Customer Name: {0}
非常感谢
答案 0 :(得分:3)
由于方法的重载而发生问题。当您将string
作为第二个参数传递时,它映射到以下方法:
如您所见,这种重载不像要在字符串中替换它们那样期待“参数”,而是等待de Debug信息的“类别”。
由于以下重载,将字符串强制转换为对象的代码有效:
如您所见,将字符串转换为“对象”时,它映射到WriteLine
方法的另一个重载,实际上是期望将值格式化为字符串。我相信这可以回答您对它为什么在投射到对象时起作用的疑问。
答案 1 :(得分:1)
一种可行的替代方法是使用$ string interpolation
产生这个
Debug.Writline($"CustomerName {customer.Name});
我无意中在评论中回答了这个问题,但发现实际的原因得到了回答here,并且我们遇到了错误的重载,而不是插值错误。