Можете ли вы иметь общий список (из T) в файле настроек? - PullRequest
11 голосов
/ 04 июня 2009

В моем файле настроек мне бы хотелось иметь одну настройку типа List (из Myclass) .... Я не могу найти в сети ничего такого, что делает это. Возможно ли это?

Ответы [ 5 ]

12 голосов
/ 28 октября 2010

Я согласен, что решение Meta-Knight для наследования является лучшим, однако это можно сделать, вручную отредактировав файл настроек XML. В обозревателе решений перейдите по ссылке: Solution> Project> Properties> Settings.settings. Щелкните правой кнопкой мыши файл Settings.settings и выберите «Открыть с помощью». Выберите «XML (Text) Editor». Затем вставьте следующее <Settings>:

<Setting Name="TestGenericList" Type="System.Collections.Generic.List&lt;int&gt;" Scope="User">
  <Value Profile="(Default)" />
</Setting>

сохранить, и все работает.

К сожалению, он не работает с универсальными типами, требующими двух или более типов, так как запятая не допускается в этом атрибуте. Даже кодирование объектов (&#x002C;) не помогло.

Следующее вызывает ошибку «Недопустимые символы в пути» при переходе к редактированию файла настроек в конструкторе настроек:

<Setting Name="TestGenericDictionary" Type="System.Collections.Generic.Dictionary&lt;string&#x002C;string&gt;" Scope="User">
  <Value Profile="(Default)" />
</Setting>
8 голосов
/ 04 июня 2009

Я полагаю, вы говорите о пользовательских настройках ...

Я не знаю, можете ли вы указать универсальный тип, хотя, если вы создадите свой собственный неуниверсальный тип, который наследуется от List (MyClass), то вы можете без проблем указать этот тип в качестве пользовательского параметра.

Что-то вроде:

Public Class MyClassList 
    Inherits List(Of MyClass)

End Class

Тогда вы сможете найти MyClassList.

3 голосов
/ 17 августа 2012

Возможно, я немного опоздал с игрой, чтобы найти решение для этого ответа, но вы можете включить свое свойство общих настроек в частичный класс в другом файле в проекте, чтобы конструктор настроек не переписывал любые пользовательские код, который вы добавляете.

В моем случае (с использованием VB.NET) я хотел сохранить Dictionary(Of String, String) в My.Settings, за исключением того, что словарь нужно было сериализовать как двоичный, потому что его нелегко сериализовать в XML. Я удалил свойство настройки из конструктора, а затем добавил файл Settings.Extended.vb в свой проект со следующим кодом внутри:

'** Keeping My.Settings.FormLayouts out of Settings.Designer.vb so that this custom code is not overwritten by Visual Studio.'

Namespace My
   Partial Friend NotInheritable Class MySettings
      <Configuration.UserScopedSettingAttribute(), _
       DebuggerNonUserCodeAttribute(), _
       Configuration.SettingsSerializeAs(Configuration.SettingsSerializeAs.Binary)> _
      Public Property FormLayouts() As Dictionary(Of String, String)
         Get
            Return CType(Me("FormLayouts"), Dictionary(Of String, String))
         End Get
         Set(ByVal value As Dictionary(Of String, String))
            Me("FormLayouts") = value
         End Set
      End Property
   End Class
End Namespace

Свойство FormLayouts все еще является частью My.Settings и будет загружаться и сохраняться как обычно, но добавление дополнительных настроек в конструкторе настроек приложения не приведет к перезаписи кода выше.

0 голосов
/ 04 июня 2009

Вы можете сериализовать ваш List<T> в строку и поместить его в файл настроек.

Будет ли это работать?

0 голосов
/ 04 июня 2009

Да, это возможно, просто введите List в поле типа вручную, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...