似乎Properties.Settings
的user.config文件可以使用< value />正确处理空字符串值。 tag,但只包含一个或多个空格的值(例如“”)不会存储为...
<value> </value>
而是......
<value>
</value>
因此包括CRLF和'缩进'空格。
如何保存一个或多个空格字符的设置?
答案 0 :(得分:3)
如果白色空间很重要,请使用CDATA:
<value><![CDATA[ ]]></value>
答案 1 :(得分:1)
感谢您提出这些建议,但都没有解决问题。使用CDATA意味着下次将属性加载到程序中时(例如string prop = Properties.Settings.Default.MyProp
),您将获得CDATA字符串(例如,prop现在是"<![CDATA..."
)。如果使用
,也会发生同样的事情。顺便提一下,P.S.D.Save()自动转换&amp;,&lt;和&gt;到&, <, and >
个实体。
如果字符串(和字符)设置为EITHER null或至少包含一个非空格字符,则基本上保存并恢复字符串(和字符)设置,但是未正确保存一个或多个空格(或一个空格的字符串)的字符串
此问题产生于一个程序,该程序允许用户设置一个字符串以用作行缩进前缀(例如。"----", " "
等)。我已经改变了程序以避免这个空格字符串错误,但在我看来,一串空格应该仍然是一个完全有效的“属性”!
答案 2 :(得分:0)
对于其他正在寻找如何在配置中保存“ SPACE”的人...
您可以简单地使用ASCII表(http://www.asciitable.com/)中的十进制值。因此对于空格字符,其值为32。一些示例...:
示例1:
在App.config中保存单个空间
配置部分:
<setting name="OneSpaceString" serializeAs="String">
<value>32</value>
</setting>
应用程序部分:
char space = Convert.ToChar(int.Parse(Properties.Settings.Default.OneSpaceString));
string stringSpace = space.ToString();
示例2:
在配置中保存多个空格字符串(有很多方法,例如...)
配置部分
<setting name="MultiSpaceString" serializeAs="String">
<value>32;32;32;32</value>
</setting>
应用程序部分:
char[] spaces = Properties.Settings.Default.MultiSpaceString.GetCharsByDecimal(new char[] { ';' });
string stringSpaces = string.Join(string.Empty, spaces);
//Extension method for getting chars by decimal from our string
public static char[] GetCharsByDecimal(this string inputString, char[] delimiters)
{
int[] charsDecimals = inputString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).Select(s => int.Parse(s)).ToArray();
char[] resultChars = new char[charsDecimals.Length];
for (int i = 0; i < charsDecimals.Length; i++)
{
resultChars[i] = Convert.ToChar(charsDecimals[i]);
}
return resultChars;
}
//Or safer variant of our extension method
public static char[] GetCharsByDecimal(this string inputString)
{
int[] charsDecimals = Regex.Split(inputString, @"\D+").Select(s => int.Parse(s)).ToArray();
char[] resultChars = new char[charsDecimals.Length];
for (int i = 0; i < charsDecimals.Length; i++)
{
resultChars[i] = Convert.ToChar(charsDecimals[i]);
}
return resultChars;
}
示例3:
在配置文件中保存定界符(包括空格)
配置部分
<setting name="Delimiters" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>59</string>
<string>44</string>
<string>9</string>
<string>45</string>
<string>124</string>
<string>32</string>
</ArrayOfString>
</value>
</setting>
应用部分
char[] delimiters = Properties.Settings.Default.Delimiters.Cast<string>().Select(s => Convert.ToChar(int.Parse(s))).ToArray();