谷歌让我失望了,所以我转向Stack Overflow。你是我唯一的希望!
我有一个有几个属性的类。其中一个属性是双打列表。我希望能够读取列表中的每个双精度并将其打印到文本框中。
Public Class MyClass
Dim aValue As List(Of Double)
Public Property myProp As List(Of Double)
Get
Return aValue 'This very well could be my problem
End Get
Set(value As List(Of Double))
'This is also likely the culprit, as I have no idea what to put here
End Set
End Property
End Class
所以,我有那堂课。然后,我尝试按如下方式初始化myProp
的值:
Dim c As New MyClass()
Dim vals As New List(Of Double)
For i = 0 To 11
Dim rndVal = CInt(Math.Floor((10 - (-10) + 1) * Rnd())) + (-10)
vals.Add(rndVal)
Next
c.myProp = vals
然后我希望能够获取Property myProp
并返回包含的myProp
值,然后将它们打印到文本框中。这就是我目前所拥有的:
Public Class Calc
Private Sub drpdwnBox_SelectedIndexChanged(sender As Object, e As EventARgs), Handles drpdwnBox.SelectedIndexChanged
For Each p As Reflection.PropertyInfo In myClass.GetType().GetProperties()
If p.CanRead Then
'This works to get the name of the Property, but...
txtBox.Text &= p.Name & " "
'This does nothing, basically.
If p.GetType Is GetType(List(Of Double)) Then
For Each k In p.GetValue(myClass, Nothing).Keys
txtBox.Text &= p.GetValue(myClass, Nothing).Keys.ToString() & " "
txtBox.Text &= vbNewLine
Next
Else
'This also works to get the value of properties that aren't lists
txtBox.Text &= p.GetValue(Nation, Nothing).ToString() & vbNewLine
End If
End If
Next
End Sub
上面的代码可能存在一些问题。不过,在这一点上,我会得到任何帮助。如果没有List作为属性有更好的方法来做到这一点,那也是一个受欢迎的解决方案。我使用List作为Property方式的主要原因是我使用XmlSerializer快速轻松地将类和属性转换为XML文件进行存储。
无论如何,我运行此代码时得到的输出如下:
myProp
Aaaand就是这样。没有添加List的值,但我至少得到了Property的名称,因此该部分至少是正确的。
无论如何,感谢能够提供任何解决方案的任何人!
答案 0 :(得分:0)
您可能根本不想拥有Set
这个属性。这样做:
Public Class myClass
Private aValue As New List(Of Double)
Public Property myProp As List(Of Double)
Get
Return aValue
End Get
End Property
End Class
然后添加如下值:
For i = 0 To 11
Dim rndVal = CInt(Math.Floor((10 - (-10) + 1) * Rnd())) + (-10)
'myProp.Add() only needs the Get accessor!
myClassInstance.myProp.Add(rndVal)
Next
注意我使用了myClassInstance
而不是myClass
。为了使用您的类,您必须在变量中实际创建它的实例。从Public Class myClass
一直到End Class
的所有内容都只描述了一个对象实例在创建一个对象实例后的行为,但是不实际上在内存中创建了任何东西但你可以使用。在某个地方,你必须先说New myClass()
,然后才能使用它。
拥有该变量后,您的最终代码段将更像这样:
Private Sub drpdwnBox_SelectedIndexChanged(sender As Object, e As EventARgs), Handles drpdwnBox.SelectedIndexChanged
For Each k As Double In myClassInstance.myProp
txtBox.Text &= k
Next
End Sub
除非你能够理解类的实例和类的定义之间的区别,以及如何将变量与对象引用一起用于类,否则你将很难写任何工作代码。