【发布时间】:2020-03-02 03:34:58
【问题描述】:
我想在文本冒险游戏的每个房间中创建一个项目列表,但我希望每个项目都有项目的名称和项目的描述,所以我可以调用其中一个/两个字符串项目取决于我需要的项目。
Dim StartRoom As RoomInfo
Public Class Items
Public ItemName As String
Public ItemDescription As String
End Class
Public Structure RoomInfo
Dim RoomName As String
Dim BasicDescription As String
Dim RoomDescription As String
Dim ValidExists As List(Of String)
Dim ObjectsInRoom As List(Of String)
Dim ItemsInRoom As List(Of Items)
End Structure
Sub InitializeRooms()
StartRoom.RoomName = "Start Room"
StartRoom.RoomDescription = "Test Description"
StartRoom.BasicDescription = "Test Basic Description"
Dim TestItem As New Items With {
.ItemName = "Test Item",
.ItemDescription = "This is a Test Item"
}
StartRoom.ItemsInRoom.Add(TestItem)
End Sub
我创建了一个列表 ItemsInRoom,它是一个项目列表,一个类。这样,每个房间都可以有一个独特的项目列表,可以在玩家拿起它们或与它们交互时进行更改。这就是 Initialize Rooms 子的用途——我可以在游戏加载时运行它,并为游戏中的每个房间设置所有信息。 无论如何,当我尝试将 TestItem 添加到列表中时,我得到一个“未设置对象实例的对象引用”。错误。我非常愚蠢,这可能是书中最明显的错误,但我找不到这个特殊情况的解决方案。 感谢您的帮助。
【问题讨论】:
-
您需要先调用 NEW on list 才能添加项目
-
解决了,我觉得自己更笨也更聪明
-
RoomInfo不应该是一个结构。它应该是一个类,然后您可以在声明中包含New进行初始化。 -
您还应该将您的类型声明为属性而不是字段。在一个类中,
List属性应该是ReadOnly。这意味着您不能向List添加项目,而是您不能用不同的List替换List。这就是集合属性在整个 .NET Framework 中的工作方式。
标签: vb.net list class object-reference