C#设置中的制表符

C#设置中的制表符,c#,.net,application-settings,C#,.net,Application Settings,我正试图将一个制表符,如\t放入C#应用程序的内部(如char)。 到目前为止我失败了。 我还尝试使用其他序列化,但没有成功 因此,我的简单问题是,您是否能够以某种方式将制表符放入C#中的应用程序/用户设置中 更新: 是.NET4.5.2 看起来,类型string也有问题。当我从记事本++粘贴选项卡时,它会在app.config中添加一行新行和一些空白字符,但没有选项卡字符: 使用和#09或\\t而不是配置文件中的\t要通过VS UI执行此操作,请使用标准技巧,该技巧几乎适用于所有应用程序和情况

我正试图将一个制表符,如
\t
放入C#应用程序的内部(如
char
)。 到目前为止我失败了。 我还尝试使用其他序列化,但没有成功

因此,我的简单问题是,您是否能够以某种方式将制表符放入C#中的应用程序/用户设置中

更新:

是.NET4.5.2

看起来,类型
string
也有问题。当我从记事本++粘贴选项卡时,它会在
app.config
中添加一行新行和一些空白字符,但没有选项卡字符:
使用
和#09
\\t
而不是配置文件中的
\t
要通过VS UI执行此操作,请使用标准技巧,该技巧几乎适用于所有应用程序和情况,包括:在剪贴板上放置一个选项卡,然后将其粘贴到目标应用程序中。

其他人将在配置中查找如何保存“选项卡”或“空间”等

您可以简单地使用ASCII表()中的十进制值。例如,对于空格字符,它的值是32,对于制表符,它的值是9。一些例子…:

示例1:

在App.config中保存单个选项卡

配置部分:

示例2:

在配置中保存多制表符字符串(有很多方法,但例如…)

配置部分


9;9;9;9;9
申请组:

char[]tabs=Properties.Settings.Default.MultiTabString.GetCharsByDecimal(新字符[]{';'});
string stringTabs=string.Join(string.Empty,tabs);
//从字符串中按十进制获取字符的扩展方法
公共静态字符[]GetCharsByCimal(此字符串为inputString,字符[]分隔符)
{
int[]charsDecimals=inputString.Split(分隔符、StringSplitOptions.RemoveEmptyEntries)。选择(s=>int.Parse)).ToArray();
char[]resultChars=新字符[charsDecimals.Length];
for(int i=0;iint.Parse)).ToArray();
char[]resultChars=新字符[charsDecimals.Length];
for(int i=0;i
示例3:

在配置中保存分隔符(包括制表符)

配置部分


59
44
9
45
124
32
申请组

char[]分隔符=属性。设置
违约
.分隔符
.Cast()
.Select(s=>Convert.ToChar(int.Parse)).ToArray();

它不起作用。它会在App.config中放入一个空字符串,如果您在UI中重新打开Settings.Settings,则该字符串为空。很抱歉,它不适用于您。在发布答案之前,我立即在vs2015中对其进行了测试。我高度怀疑你做错了。也许你可以尽可能详细地解释一下你在剪贴板中获取选项卡并将其粘贴到VS设置编辑器中的确切过程。我通过VS UI添加了一个新设置,用应用程序代码将其放入char,在记事本++中创建了一个选项卡,将其粘贴到值中并保存了
.settings
文件。当我重新打开它提到的
.settings文件时,当前值是空字符串,如果我想将选项卡作为值应用。每次都会发生这种情况,并且选项卡本身从未作为值应用。另外,在
app.config
中,值标记中只有一个空字符串。因此,您添加了一个字符类型。你从来都不清楚。我怀疑有人会想到这一点。我尝试了这个,但是.settings文件不是空字符串。app.config文件也不是空的——但是,它是一个新行,有一堆混乱的缩进空格。这似乎是一个bug,你对此无能为力。我建议您使用字符串而不是字符。只有当完整内容为空白时,字符串类型才是错误的(仅在app.config中)。您可以在条目前面加上|或类似的前缀,然后在从app.config获取条目时对其进行修剪。当我将其直接放入
app.config
并在UI中重新打开
Settings.Settings
时,它会识别一个更改并要求我将其应用于
Settings.Settings
。如果是
\\t
,则表示一个空字符串,如果是
	
它实际上建议使用一个选项卡,但在应用程序中我得到了一个
NullReferenceException
。如果在
设置中使用
字符串作为类型,这是有效的。设置
,但在使用类型
字符
时不起作用。
<setting name="OneTabString" serializeAs="String">
    <value>9</value>
</setting>
char tab = Convert.ToChar(int.Parse(Properties.Settings.Default.OneTabString));
string stringTab = tab.ToString();
<setting name="MultiTabString" serializeAs="String">
    <value>9;9;9;9;9</value>
</setting>
char[] tabs = Properties.Settings.Default.MultiTabString.GetCharsByDecimal(new char[] { ';' });
string stringTabs = string.Join(string.Empty, tabs);

//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;
    }
<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();