【问题标题】:What is the best way to create "dynamic objects" in vb.net webforms在 vb.net webforms 中创建“动态对象”的最佳方法是什么
【发布时间】:2013-03-26 00:17:46
【问题描述】:

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

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

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

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

想法?

谢谢

【问题讨论】:

  • 我想到的一个解决方案是创建一个“列表”,以便列表中的每个项目都包含有关 1 个参数的信息。

标签: vb.net object asp.net-4.5


【解决方案1】:

字典怎么样?

<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

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

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

在上面的示例中,parameterList 实际上是 anonymous typeIEnumerable,具有两个属性,Parameter As StringValue As String


了解更多关于Dictionary的资源:

...以及一些 StackOverflow 问题:

【讨论】:

  • 这似乎可行....我需要更多地研究字典...你有一个很好的链接来解释它们是如何工作的吗?
  • 在我的答案末尾添加了一些链接,不确定它们是否是最好的,但它们应该可以工作。
  • 谢谢...我一直在研究这个。我真的认为这可能有效!我会查看你的链接,希望我能在本周晚些时候尝试一下!
  • 如果这对你有用,你应该接受这个答案。您将为此获得一些声誉积分;)如果没有,您也可以随时添加并接受自己的答案。
  • 我已经编辑了我的答案,以展示您如何从字典中获取数据以进行显示。
猜你喜欢
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多