设置C#Properties.Settings值到空格只会失败

问题描述 投票:2回答:3

似乎Properties.Settings的user.config文件可以使用a正确处理空字符串值 tag,但只包含一个或多个空格的值(例如“”)不会存储为...

    <value>    </value>

而是......

     <value>
     </value>

因此包括CRLF和'缩进'空格。

如何保存一个或多个空格字符的设置?

c# spaces properties.settings
3个回答
3
投票

如果白色空间很重要,请使用CDATA:

<value><![CDATA[    ]]></value>

1
投票

感谢您提出这些建议,但都没有解决问题。使用CDATA意味着下次将属性加载到程序中时(例如,string prop = Properties.Settings.Default.MyProp),您将获得CDATA字符串(例如,prop现在是"<![CDATA...")。如果使用&nbsp;,会发生同样的事情。顺便说一句,P.S.D.Save()自动转换和&amp;, &lt;, and &gt;实体。

基本上字符串(和字符)设置如果它们是EITHER null或至少包含一个非空格字符,则会被正确保存和恢复,但是不能正确保存一个或多个空格(或一个空格的字符)的字符串。

此问题产生于一个程序,该程序允许用户设置一个字符串以用作行缩进前缀(例如,"----", " "等)。我已经改变了程序以避免这个空格字符串错误,但在我看来,一串空格应该仍然是一个完全有效的“属性”!


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();
© www.soinside.com 2019 - 2024. All rights reserved.