Settings.Default изменяет окончание строки элементов Specialized.StringCollection - PullRequest
0 голосов
/ 11 июня 2018

Я только что столкнулся со странным поведением Settings.Default при использовании параметра типа Specialized.StringCollection.

Проблема в том, что когда загружаются настройки (либо путем вызова .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 неверным образом.

Есть что-то, чего я пропускаю? Или это ошибка в классе Settings.Default(возможно, метод .Reload()), и мне следует вручную изменять окончания строк при каждом запуске приложения?

...