Я только что столкнулся со странным поведением 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()
), и мне следует вручную изменять окончания строк при каждом запуске приложения?