为什么Debug.WriteLine错误地格式化字符串?

IAb*_*act 25 .net c#

我有以下内容Debug.WriteLine:

Debug.WriteLine("Metadata Version: {0}", version); // update: version is a string
Run Code Online (Sandbox Code Playgroud)

输出是:

2.0:元数据版本:{0}

为什么字符串格式化?

我没有在MSDN文档中看到任何标识这种格式背后的推理的内容.我必须执行以下操作才能获得格式正确的输出:

Debug.WriteLine(string.Format("Metadata Version: {0}", version));
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 25

既然version是a string,那么你就要接受一个类别的重载WriteLine作为它的第二个参数.

虽然有任何数量的黑客可以绕过这种行为(我将在下面添加一些,为了好玩)我个人更喜欢你的解决方案作为明确确保字符串被视为格式字符串的首选方式.

其他一些hacky解决方法:

Debug.WriteLine("Metadata Version: {0}", version, "");
Debug.WriteLine("Metadata Version: {0}", (object)version);
Debug.WriteLine("Metadata Version: {0}", new[] { version });
Debug.WriteLine("Metadata Version: {0}", version, null);
Run Code Online (Sandbox Code Playgroud)

  • 虽然workaroud很容易,但这是一个糟糕的阶级'desginer,恕我直言. (5认同)

Hab*_*bib 13

由于您version是字符串,因此它使用Debug.WriteLine方法(String,String)重载.

您可以做几件事来获得正确的结果:

Debug.WriteLine("Metadata Version: {0}",(object) version);
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 Debug.Print

Debug.Print("Metadata Version: {0}", version);
Run Code Online (Sandbox Code Playgroud)

  • +1表示`Print(...)`方法. (2认同)

ash*_*oto 6

或者,您可以使用字符串插值$只需在字符串前面放置一个符号并在大括号中指定变量即可{variableName}

Debug.WriteLine($"Metadata Version: {version}");
Run Code Online (Sandbox Code Playgroud)

  • 在做出接受的答案时不可用,但现在可能是最好的解决方案。 (2认同)