Я создаю приложение Windows в VB.NET, в котором необходимо хранить приличную сумму ассоциативной информации о разных приложениях. Я пытаюсь выяснить, как лучше всего хранить эти данные.VB.net разнесенный массив разных типов
После выполнения некоторых исследований лучшим решением, которое я нашел, является использование массивов объектов или словарей объектов.
Вот моя структура данных, которая должна быть сохранена:
var Info[AppID]['AppName']-> String (returns the app name as String)
['Exes'] -> Array of Strings
['RegKeys'] -> Array of Strings
['Versions'][VersionID]['PCID'] -> String
['Date'] -> DateTime
['Size'] -> Integer
Ключи без кавычек являются динамическими и представляют фактическое AppID/VERSIONID, ключи в кавычках являются статическими (так 2-й ключ всегда будет иметь 'AppName' 'Exes' и т.д.
так, например:
Info[123ab]['Name'] = 'Internet Exploder'
['Exes'] = {'iexplore.exe', 'whatever.exe'}
['RegKeys'] = {'hkey/local machine .....'}
['Versions'][1]['PCID'] = 'My Desktop'
['Date'] = Jan 1 1960
['Size'] = 9001
будет объявлен и создан в качестве
Dim appinfo As New Dictionary(Of String, Object)
Dim Lv2 As New Dictionary(Of String, Object)
Dim Exes As New List(Of String)(New String() {"iexplorer.exe", "whatever.exe"})
Dim RegKeys As New List(Of String)(New String() {"blah"})
Dim Directories As New List(Of String)(New String() {"c:\program files\internet explorer"})
Dim Name As String = "Internet Exploder"
Dim Versions As New Dictionary(Of String, Object)
Dim VersionsLv2 As New Dictionary(Of String, Object)
Dim VersionID As String = "1"
Dim PCID As String = "My Desktop"
Dim TheDate As Date = Now
Dim Size As Integer = 9001
VersionsLv2.Add("PCID", PCID)
VersionsLv2.Add("Date", TheDate)
VersionsLv2.Add("Size", Size)
Versions.Add("VersionID", VersionsLv2)
Lv2.Add("Name", Name)
Lv2.Add("RegKeys", RegKeys)
Lv2.Add("Directories", Directories)
Lv2.Add("Versions", Versions)
appinfo.Add("abc12", Lv2)
Мне просто интересно, знает ли кто-нибудь лучший способ сделать это? Я ненавижу работать с вершины дерева, чтобы инициализировать переменную, но это, похоже, работает нормально.
Благодарим вас за ввод!
Большое спасибо за ваш ответ. Это выглядит очень привлекательно. Я не потратил слишком много времени на vb.NET и увидел, что вы можете определить свой собственный тип с помощью классов, но не смогли полностью понять. Я вернусь к документации по этому вопросу, но с другой стороны - есть ли особая причина, почему только 3 списка находятся в «public App()», а не в других свойствах? Не хватает ли в массиве избыточности? Или я понимаю это неправильно? – TheOddPerson
Необычно, чтобы свойство чтения/записи отображало массив. Затем можно заменить существующий массив снаружи новым. Обычно свойство только для чтения предоставляет коллекцию, поэтому элементы можно добавлять и удалять, но сама коллекция не может быть заменена. В самой Структуре есть много примеров, например. 'ListBox.Items' и многие другие. В моем коде выше конструктор 'App' используется для создания пустых коллекций при создании самого объекта' App'. Другим свойствам не нужна никакая инициализация, поэтому они не упоминаются в конструкторе. – jmcilhinney
@tinstaafl, хороший пункт и сделано. Я не уверен, почему я это сделал в первую очередь. Новый код немного отличается по структуре из-за различного синтаксиса, но функционально эквивалентен. – jmcilhinney