[英]VB.NET Pointer to value types
VB.NET 2010,.NET 4
大家好,
我绝不是一个优秀的程序员,我只是想把我的头放在其中,因此,如果这是一个愚蠢的问题,请原谅我。
我希望以下内容产生一个消息框,显示“ 2”而不是“ 5”:
Public Class SomeClass
Private SomeInt As Integer = 5
Private SomeListOfInts As New List(Of Integer)
Public Sub New()
SomeListOfInts.Add(SomeInt)
SomeListOfInts(0) = 2
MsgBox(SomeInt.ToString)
End Sub
End Class
这行不通。 消息框显示“ 5”。 我认为我在某种程度上理解了原因。 由于SomeInt是值类型,因此将其添加到SomeListOfInts只会添加一个副本。 很抱歉,如果这是不一致的。 有没有简单的方法可以做到这一点?
预先感谢,Brian
编辑:我只是想补充一下,我怀疑人们会说“为什么要这样做?” /“这不是一件好事。” 等等,我很好,我想知道是否有更好的方法,但是,无论是否是好的实践,我都对如何完成这样的事情普遍感到好奇。 另外,如果这不是一个好习惯(无论意味着什么),为什么呢?
输出为5,因为您的MsgBox引用的是SomeInt
, 而不是 SomeListOfInts(0)
尝试这个:
Public Class SomeClass
Private SomeInt As Integer = 5
Private SomeListOfInts As New List(Of Integer)
Public Sub New()
SomeListOfInts.Add(SomeInt)
SomeListOfInts(0) = 2
MsgBox(SomeListOfInts(0).ToString) // here is the change
End Sub
End Class
这个...
SomeListOfInts(0) = 2
将列表中的索引元素0从5(元素0的原始值)更改为2。而且, int
是值类型。 因此,当您将SomeInt
添加到列表中时,您已经创建了值类型的副本。 可以更改副本而不会影响原始的SomeInt
。
您可以从以下内容开始:
私有ListOfInts作为新列表(整数)
Public Sub New(SomeInt As Integer)
ListOfInts.Add(SomeInt)
' processes
ListOfInts(0) = 2
MsgBox(SomeListOfInts(0).ToString)
End Sub
也许您对您正在尝试做的事情有了更多的了解,我可以帮助您更加接近您的期望。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.