繁体   English   中英

VB.NET指向值类型的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM