【发布时间】:2013-12-18 17:20:03
【问题描述】:
我有一种情况,我需要创建一个 DTO 类来存储子项列表,但列表中子项的数量需要固定。由于它是 DTO,我需要能够修改列表中每个项目的值,但我不希望使用代码能够从列表中添加或删除项目。
例如,假设我需要一个 Person 类,并且我需要该 Person 类来存储电话号码列表。为了这个例子,假设一个人只能拥有三个电话号码。在任何其他语言中,我只是将列表创建为数组,因为其他语言中的数组无法调整大小。但是,在 VB.NET 中,您始终可以在任何数组上调用 ReDim,即使您使用 VBFixedArray 属性也是如此。例如,这 不 做我需要的:
Public Sub Main()
Dim p As New Person()
p.PhoneNumbers(0) = "555-555-5555"
ReDim Preserve p.PhoneNumbers(5) ' Successfuly changes the size of the array--not good
End Sub
Public Class Person
<VBFixedArray(2)>
Public PhoneNumbers As String() = {"", "", ""}
End Class
如果我尝试使用IReadOnlyList,则大小会固定,但项目本身也是如此。例如,这是行不通的:
Public Sub Main()
Dim p As New Person()
p.PhoneNumbers(0) = "555-555-5555" ' Compile error: Property 'Item' is 'ReadOnly'.
End Sub
Public Class Person
Public ReadOnly Property PhoneNumbers As IReadOnlyList(Of String)
Get
Return _phoneNumbers.AsReadOnly()
End Get
End Property
Private _phoneNumbers As New List(Of String)({"", "", ""})
End Class
那么,在 VB.NET 中,我如何在我的 DTO 类上创建一个公共属性,其中包含一个固定长度的项目列表,其中项目的值可以更改,但项目的数量不能。
【问题讨论】:
标签: arrays vb.net properties