提问人:ecit 提问时间:11/10/2021 最后编辑:halferecit 更新时间:11/26/2021 访问量:106
无法弄清楚基于类制作数组
Can't figure out making an Array based off of a Class
问:
我试图做的是从包含信息列表的类创建一个数组。
到目前为止,我尝试的是 - 首先,创建类:
Public Class PowerArray
Public Name As String
Public Action As String
Public Cost As Integer
Public Pool1 As String
Public Pool2 As String
Public Range As String
Public Duration As String
Public Tags As ArrayList = New ArrayList
Public Desc As String
End Class
然后,定义一个使用 PowerArray 作为类型的新对象,该对象包含在 Public Class 中,因此可以在任何 sub 中调用它:
Public Class GVar
Public Shared CharPowers(100) As PowerArray
Public Shared PCount As Integer = 0
End Class
但是当我尝试写入该对象时,它不断抛出 Null 引用异常。
例:
尝试将条目写入 CharPowers(GVar.Pcount)(其中 PCount 当前为 0,并且“txt.PowerName.Text“是任何字符串):
GVar.CharPowers(GVar.PCount).Name = txtPowerName.Text
...引发异常。无论我尝试写入哪个值,都会发生这种情况。
在使用该类型(不是作为数组,而只是一个简单的对象)在子中定义一个新对象时,我没有遇到任何重大的挂断,所以我猜是该对象是一个数组。我只是不知道如何或为什么。它显然存在,它是在启动时定义的。
答:
0赞
ecit
11/10/2021
#1
似乎我被一个答案绊倒了。特别:
Public Class GVar
Public Shared CharPowers(100) As PowerArray
Public Shared PCount As Integer = 0
Shared Sub New()
For i = 0 To CharPowers.GetUpperBound(0)
CharPowers(i) = New PowerArray
Next
End Sub
End Class
评论
0赞
Edward
11/10/2021
您需要先初始化数组 GVar.CharPowers,然后使用它。检查 learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/...GVar.CharPowers = Array.CreateInstance(GetType(PowerArray), 19)
0赞
djv
11/10/2021
@Edward您评论中的 19 应该是 100?
0赞
Edward
11/11/2021
@djv 19 是数组大小。似乎主题启动器应该使用字典(Of <key_type>,PowerArray)
0赞
Mary
11/10/2021
#2
数组 in 是一个元素数组,类型为 ,值为 。必须先创建元素的实例并将其分配给元素(数组),然后才能设置对象的字段。GVar
PowerArray
Nothing
PowerArray
PowerArray
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim PA As New PowerArray
GVar.CharPowers(GVar.PCount) = PA
GVar.CharPowers(GVar.PCount).Name = TextBox1.Text
MessageBox.Show(GVar.CharPowers(GVar.PCount).Name)
End Sub
你打算递增吗?如果您使用 .PCount
List(Of PowerArray)
编辑
Public Class PowerArray
Public Property Name As String
Public Property Action As String
Public Property Cost As Integer
Public Property Pool1 As String
Public Property Pool2 As String
Public Property Range As String
Public Property Duration As String
Public Property Tags As New List(Of Object)
Public Property Desc As String
End Class
Public Class GVar
Public Shared Property CharPowers As New List(Of PowerArray)
End Class
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim PA As New PowerArray
PA.Name = TextBox1.Text
GVar.CharPowers.Add(PA)
For Each item As PowerArray In GVar.CharPowers
MessageBox.Show(item.Name)
Next
End Sub
评论
0赞
ecit
11/10/2021
我只是在想类似的事情,然后开始在List周围闲逛。但是,它遇到了一个新问题 - 无法弄清楚如何在 PowerArray 的 List 对象中添加或删除特定变量中的项目。示例:设置一个新的 oject - Public Shared ChrTester As New List(Of PowerArray) - 然后尝试向其中的特定值添加一个条目: GVar.ChrTester.Add(GVar.ChrTester.Name “steve”) - 我肯定在列表的工作方式中缺少一些东西,但它对我来说仍然很新。
0赞
Mary
11/10/2021
请参阅我对答案的编辑。我稍微修复了这些类,并演示了如何添加和检索属性。
0赞
ecit
11/10/2021
很好!我假设多个加法 (PA.Name = x, PA) 是正确的。Cost = x 等),然后执行 GVar.CharPowers.Add(PA) 会将分配给 PA 的所有值相加?
0赞
ecit
11/10/2021
无法编辑之前的评论,但是:回答了我自己的问题,是的!使用此设置,从列表加载也容易得多,感谢您解释列表。这件事改变了生活
0赞
Mary
11/11/2021
@ecit我同意。阵列位于后视镜中。如果我需要一个数组,我可以随时调用一个 .ToArray
List(Of T)
评论
ArrayList
List(Of Object)