【问题标题】:Having problems adding items to a list (of class) in VB.Net在 VB.Net 中将项目添加到(类)列表时出现问题
【发布时间】: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


【解决方案1】:

你的类型声明应该是这样的:

Public Class Item
    Public Property Name As String
    Public Property Description As String
End Class

Public Class Room
    Public Property Name As String
    Public Property BasicDescription As String
    Public Property RoomDescription As String
    Public ReadOnly Property ValidExists As New List(Of String)
    Public ReadOnly Property Objects As New List(Of String)
    Public ReadOnly Property Items As New List(Of Item)
End Class

类型和成员的更好名称,类而不是结构,属性而不是字段,在声明它们的位置创建集合,集合属性只读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多