C# 默认值更改Specialized.StringCollection元素的行尾

C# 默认值更改Specialized.StringCollection元素的行尾,c#,.net,newline,C#,.net,Newline,在使用Specialized.StringCollection类型的设置时,我刚刚遇到了一个奇怪的行为Settings.Default 问题是,每当加载设置时(通过调用.Reload()或通过重新启动应用程序——我假设无论如何调用Reload()),StringCollection变量/设置的元素都会从回车符和换行符更改所有行尾(\r\n)只允许换行(\n) 这里有一个控制台应用程序演示了这个问题: static void Main(string[] args) { if (Proper

在使用
Specialized.StringCollection
类型的设置时,我刚刚遇到了一个奇怪的行为
Settings.Default

问题是,每当加载设置时(通过调用
.Reload()
或通过重新启动应用程序——我假设无论如何调用
Reload()
),StringCollection变量/设置的元素都会从回车符和换行符更改所有行尾(
\r\n
)只允许换行(
\n

这里有一个控制台应用程序演示了这个问题:

static void Main(string[] args)
{
    if (Properties.Settings.Default.Foo == null)
    {
        Properties.Settings.Default.Foo = 
            new System.Collections.Specialized.StringCollection();
        Properties.Settings.Default.Foo.Add("Hello\r\nworld");
        Properties.Settings.Default.Save();
    }

    // Either call .Reload() or restart the application.
    Properties.Settings.Default.Reload();

    string currentValue = Properties.Settings.Default.Foo[0];
    Console.WriteLine(currentValue == "Hello\r\nworld");    // False
    Console.WriteLine(currentValue == "Hello\nworld");      // True

    Console.ReadLine();
}
请注意,
.config
文件中的实际值实际上没有改变(当然,除非我们再次调用
.Save()
)。它似乎以错误的方式“加载”到
StringCollection


我缺少什么吗?或者这是
设置中的一个错误。默认的
类(可能是
.Reload()
方法),我应该在每次应用程序启动时手动更改行尾?

它可能与
设置.Designer.cs
中的
\r\n
的内部使用有关。此序列用于分隔ArrayOfString。在项目中允许相同的顺序可能会把事情搞砸。如果使用
\u000D\u000A
(因为Xml使用Unicode编码),情况也是一样的。重新加载时,它将返回
\n
。这可能是TextBox的问题,但RichTextBox没有,它使用更兼容的
\n
作为行分隔符。无论如何,您可以根据需要拆分字符串数组并重建它。@Jimi但是,好的,设置不是从
settings.Desinger.cs
加载的,它们是从
%LocalAppData%
中的
user.config
XML文件加载的。该XML文件不使用换行符来分隔
ArrayOfString
的元素。每个元素。如果在设置编辑器中手动插入一些数据,它将存储在
settings.Designer.cs
xml文件中。因为必须定义一个标准来加载这些文件内容,所以双重标准并不方便。这是一种假设。另一个假设是兼容性,因为.Net已经成为多平台。所有的假设都不是因为我懒惰。因为我搜索了一个官方原因,但没有找到任何相关信息(如果没有其他假设的话)。重要的是,这是一种一致的行为,无论您将数据存储在何处。@Jimi,如果您使用编辑器手动插入一些数据,它也不会存储在
.Designer.cs
中,而是使用相同的XML结构存储在app.config/web.config文件中。此外,这不是一个一致的行为,因为如果您有一个类型为
String
的变量/设置,其中包含一些
\r\n
,则在重新加载设置后,它将保持
\r\n
。此处为Visual Studio 15.7.3。这些设置存储在两个文件中(
Settings.Designer.cs
App.config
)。我说一致是因为这是我可以测试的。当您第一次将一些带有
\r\n
的字符串存储在其中,然后读取设置时,您会在这些字符串中找到
\r\n
。当您
.Save
设置,然后重新加载它们(或退出程序)时,您会发现
\n
是单独的。我不记得看到过任何不同的情况(还测试了将字符串传递给TextBox和RichTextBox)。