2010-09-02 156 views
2

的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「

我也想知道如何避免獲得額外的」\「字符。

+0

如果使用'Environment.NewLine',會發生什麼? – DaveDev 2010-09-03 00:19:05

+0

我不能把'Environment.NewLine'放在我的App.config中 – JohnB 2010-09-03 00:30:26

+2

https://connect.microsoft.com/VisualStudio/feedback/details/594160/consider-displaying-strings-in-the-debugger-without-escaping – Timwi 2010-09-03 02:07:43

回答

2

如果你正在閱讀從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> 

編譯罰款和產生正確的結果。

+0

這兩個問題都絕對正確:#1從App.config(AKA XML文件)讀取等價於'@「」',因爲它隱式地轉義了字符「#」,#2只是在回車中輸入回車.config修復了我的問題。謝謝。 *(JaredPar的答案與我的問題無關。)* – JohnB 2010-09-03 01:01:56

+0

另外,JaredPar是正確的。調試器用'「\\ r \\ n」'顯示'value1',這是從App.config中讀入後的實際值。但是,調試器通過隱藏額外的斜線來顯示'Dictionary'內容:'「\ r \ n」' – JohnB 2010-09-03 13:46:31

6

該字典沒有對您的字符串做任何事情。調試器,或更具體的表達式評估器,當它包含換行符時,將改變顯示字符串的格式。最終目標是使其在調試器通常具有的值的單行上更好地顯示。

我最近做了一個博客帖子裏面將詳細介紹什麼調試程序和設計背後的原因

編輯

我相信這是一個您的示例代碼中存在缺陷。我認爲你離開@符號的字典添加的值。如果沒有@這個符號,我不會得到你的repro,但是我會這樣做。假設@雖然丟失...

您看到帶額外轉義字符串的原因是調試器始終將字符串顯示爲字符串文本而不是逐字字符串。在字符串文字中,您需要使用雙轉義來匹配逐字字符串中的等效代碼。因此\n成爲\\n

+0

謝謝,但我並不完全相信。我的問題是,我不希望額外的斜線添加到我的換行符。 – JohnB 2010-09-03 00:01:57

+0

@JohnB,增加了更多的上下文來解釋爲什麼會出現雙斜線。 – JaredPar 2010-09-03 00:05:42

+0

我沒有使用@「」 - 我明白,@會爲您轉義特殊字符。我稍後會做更多的測試,現在我必須離開。謝謝。 – JohnB 2010-09-03 00:19:11

相關問題