为什么我的字典为字符串添加额外的转义字符?
问题描述:
的App.config:为什么我的字典为字符串添加额外的转义字符?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="1" value="An error occured.\r\nPlease try again later." />
</appSettings>
</configuration>
代码:
Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
string key = "1";
keyValuePairs.Add(key, ConfigurationManager.AppSettings["key"]);
if (keyValuePairs.ContainsKey(key))
{
// when I hover over the object, keyValuePairs, in my debugger, I see, "An error occured.\r\nPlease try again later."
string value1 = keyValuePairs[key];
// now when I hover over the local variable, value, I see, "An error occured.\\r\\nPlease try again later."
}
我很好奇,为什么上面的代码添加转义字符为 “\ r \ n” 来使其“\ r \ n“
我也想知道如何避免获得额外的”\“字符。
答
如果你正在阅读从app.config中的字符串,我以为这是类似以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="errorString" value="An error occured.\r\nPlease try again later."/>
</appSettings>
</configuration>
在这种情况下,您的示例代码看起来应该是这样:
keyValuePairs.Add("1", @"An error occured.\r\nPlease try again later.");
从那里它应该很明显为什么调试器显示,因为它(特别是如果你读JaredPar's answer。
您最好使用资源字典来存储字符串,这将很容易让您在VS编辑器中插入换行符。
编辑:只是一时兴起,我试过如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="errorString" value="An error occured.
Please try again later."/>
</appSettings>
</configuration>
编译罚款和产生正确的结果。
答
该字典没有对您的字符串做任何事情。调试器,或更具体的表达式评估器,当它包含换行符时,将改变显示字符串的格式。最终目标是使其在调试器通常具有的值的单行上更好地显示。
我最近做了一个博客帖子里面将详细介绍什么调试程序和设计背后的原因
编辑
我相信这是一个您的示例代码中存在缺陷。我认为你离开@
符号的字典添加的值。如果没有@
这个符号,我不会得到你的repro,但是我会这样做。假设@
虽然丢失...
您看到带额外转义字符串的原因是调试器始终将字符串显示为字符串文本而不是逐字字符串。在字符串文字中,您需要使用双转义来匹配逐字字符串中的等效代码。因此\n
成为\\n
如果使用'Environment.NewLine',会发生什么? – DaveDev 2010-09-03 00:19:05
我不能把'Environment.NewLine'放在我的App.config中 – JohnB 2010-09-03 00:30:26
https://connect.microsoft.com/VisualStudio/feedback/details/594160/consider-displaying-strings-in-the-debugger-without-escaping – Timwi 2010-09-03 02:07:43