动态对象或属性?

时间:2015-03-09 07:30:55

标签: vb.net

我为这个模糊的问题道歉,但我不确定如何继续。

我需要的东西就像一个具有各种字段和属性的类对象,用于存储数据。
但是,由于并非所有字段/属性在编译时都是已知的,因此我还需要能够在运行时添加和使用新的字段/属性。

这些对象稍后将按列表排列,按这些字段/属性中的值排序并绑定到WPF控件。

现在我只使用它:具有各种属性的类对象,但我开始遇到问题,我需要添加更多字段/属性。

在vb.net中有什么我可以用来实现这个目的吗?

编辑:

好的,我试着说明一下。

目前我有这样的事情。
让我们说我已经定义了像这样的对象

Public Class DataEntry
    Public Property Name As String
    Public Property Type As String
    Public Property Msc As Integer
End Class

如果我知道我将在开始时拥有的所有属性,那就行得很好。如果我突然需要添加另一个属性,我会遇到问题:

Public Class DataEntry
    Public Property Name As String
    Public Property Type As String
    Public Property Msc As Integer
    Public Property AdditionalDescription As String
End Class

当然,我可以重新编译整个事情,但由于我不知道最终需要的所有可能的属性,我想知道,也许有一种方法可以从运行时实现这一点? / p>

或者我应该使用复杂的数组堆而不是自定义对象?

1 个答案:

答案 0 :(得分:5)

在运行时期间无法向类中添加新属性。

如果您不希望提前向类中添加属性而不使用,那么您可以使用dictionary来存储您在运行时之前不知道的“属性”

Public Property RunTimeProperties As New Dictionary(Of String, Object)

包含“对象”类型值的字典可以存储任何内容。字符串,数组,列表等。

RunTimeProperties.Add("Length", 100)
RunTimeProperties.Add("Height", 200)
RunTimeProperties.Add("MiddleName", "Rupert")
RunTimeProperties.Add("SiblingsNames", New String() {"John", "Sarah", "Michael"})

您可以使用TryGetValue方法从字典中获取值。

Dim value As Object

If RunTimeProperties.TryGetValue("Length", value) Then
    ' Length was found in the dictionary
Else
    ' Length was not found in the dictionary
End If