3

我不确定我是否正确地问了这个问题,因为我对此还是有点陌生​​...

但是我正在尝试学习如何做(如果可能的话)是使用用户数据(姓名、地址、电话等)创建一个可序列化的类对象。对于我的项目,我将此用户数据称为用户参数。由于此列表将继续增长。例如,喜欢的歌曲、喜欢的颜色等。

所以我想根据用户可用的“参数”动态创建对象。有些用户只有一个,有些用户会更多。用户数据/参数将存储在一个单独的表中,用户 GUID 和一个 FK 标识参数是什么。所以理想情况下,我只需要在这个表中添加一条新记录,后面的代码就可以工作了。

否则...我必须在更新或更改参数时更新序列化类、更新、插入?

想法?

谢谢

4

1 回答 1

0

字典怎么样?

<Serializable()>
Public Class UserData

  Public Property UserGUID As GUID
  Public Property Parameters As Dictionary(Of String, String)

End Class

然后你可以让字典充满如下内容:

{{"Name", "Sir Launcelot of Camelot"},
 {"Quest","To seek the Holy Grail"},
 {"Favorite Color","Blue"},
 {"Favorite Place","Castle Anthrax"},
     ...
}

你可以有一个看起来像这样的表:

UserGUID    | Parameter      | Value
-----------------------------------------------------------
AZ-12-43-EF | Name           | Sir Launcelot of Camelot
AZ-12-43-EF | Quest          | To seek the Holy Grail
AZ-12-43-EF | Favorite Color | Blue
34-DF-E4-22 | Name           | Sir Galahad of Camelot
34-DF-E4-22 | Quest          | I seek the Holy Grail
34-DF-E4-22 | Favorite Color | Blue.  No yel--  Auuuuuuuugh!

如果您需要更复杂的参数值,也许您可​​以存储一个与每个参数一起使用的 JSON 字符串?...或者如果您已经走了那么远,您可能会将所有用户数据设为 JSON 字符串;)

编辑:

要显示数据,您有几个选项,如果您知道想要什么条目,您可以简单地从字典中获取它:

If userData.Parameters.ContainsKey("Name") Then
    textBoxName = userData.Parameters("Name")
Else
    'Name value not found
    textBoxName = "Enter name here"
End If

但是,如果您想在表格中显示所有参数,则必须先将字典转换为其他内容。例如,要绑定到 a DataGridView,您可以执行以下操作:

Dim parameterList = From entry In userData.Parameters
                    Select New With { .Parameter = entry.Key, entry.Value }
dataGridView1.DataSource = parameterList.ToArray()

在上面的示例中,parameterList实际上是具有两个属性IEnumerable匿名类型Parameter As String并且Value As String.


了解更多信息的资源Dictionary

...以及一些 StackOverflow 问题:

于 2013-06-07T13:38:11.220 回答