0

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 只是添加一个副本。如果这不连贯,我很抱歉。有没有什么直接的方法可以做到这一点?

在此先感谢,布赖恩

编辑:我只是想补充一下,我怀疑人们会说“为什么要这样做?”/“这不是一件好事。” 等等。我对此很好,并且想知道一种更好的方法(如果有的话),但是,我通常也很好奇如何完成这样的事情,无论它是否是好的做法。另外,如果这不是好的做法(无论这意味着什么),为什么?

4

1 回答 1

1

它是输出 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

你可以从:

Private ListOfInts 作为新列表(整数)

Public Sub New(SomeInt As Integer)
    ListOfInts.Add(SomeInt)

    ' processes

    ListOfInts(0) = 2
    MsgBox(SomeListOfInts(0).ToString)
End Sub

也许对您正在尝试做的事情有更多的背景知识,我可以帮助您更接近您的期望。

于 2010-11-12T00:42:12.117 回答