Можете ли вы иметь общий список (T) в вашем файле настроек?

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

Ответ 1

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

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

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

Public Class MyClassList 
    Inherits List(Of MyClass)

End Class

Затем вы должны иметь возможность просматривать MyClassList.

Ответ 2

Я согласен с тем, что решение наследования Meta-Knight является лучшим, однако это можно сделать, вручную отредактировав XML файл настроек. В обозревателе решений перейдите к: Solution > Project > Properties > Settings.settings. Щелкните правой кнопкой мыши Settings.settings и выберите "Open With". Выберите "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>

Ответ 3

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

В моем случае (с использованием 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 и будет загружено и сохранено как обычно, но добавление дополнительных параметров в приложении Design Designer не перезапишет вышеприведенный код.

Ответ 4

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

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

Ответ 5

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