为什么我的词典会在字符串中添加额外的转义字符?

Joh*_*hnB 2 c# string debugging dictionary visual-studio

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>
Run Code Online (Sandbox Code Playgroud)

码:

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."
}
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么上面的代码将转义字符添加到"\ r \n"以使其成为"\ r \n"

我也想知道如何避免获得额外的"\"字符.

Jar*_*Par 6

字典对你的字符串没有任何作用.调试器,或者更具体地说是表达式计算器,将在包含换行符时显示所显示字符串的格式.最终目标是使其在调试器通常具有的值的单行上更好地显示.

我最近做了一篇博文,详细介绍了调试器的作用以及设计背后的原因

编辑

我相信您的示例代码中存在错误.我认为你在@符号中删除了添加词典的值.如果没有这个@符号,我就不会得到你的复制品.假设@虽然失踪了......

您看到带有额外转义的字符串的原因是调试器始终将字符串显示为字符串文字而不是逐字字符串.在字符串文字中,您需要双重转义以匹配逐字字符串中的等效代码.因此\n成为\\n