开发者

VB.NET Pointer to value types

开发者 https://www.devze.com 2023-01-24 11:28 出处:网络
VB.NET 2010, .NET 4 Hello all, I\'m by no means a good programmer and I\'m just trying to wrap my head around some of this stuff, so please forgive me if this is a dumb question.

VB.NET 2010, .NET 4

Hello all,

I'm by no means a good programmer and I'm just trying to wrap my head around some of this stuff, so please forgive me if this is a dumb question.

I want the following to produce a message box that says "2", no开发者_C百科t "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

This doesn't work. The message box says "5". I think that I understand why to some degree. Since SomeInt is a value type, adding it to SomeListOfInts just adds a copy. I'm sorry if this is incoherent. Is there any straightforward way to accomplish this?

Thanks in advance, Brian

Edit: I just wanted to add, I suspect folks'll say "Why try to do this?"/"This is not a good thing to try to do." etc. I'm alright with that and would like to know a better approach if there is one, however, I am also generically curious about how something like this might be done, whether it's good practice or not. Also, if it isn't good practice (whatever that means), why?


It is output 5 because your MsgBox is referencing SomeInt, not SomeListOfInts(0)

Try this:

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

This...

SomeListOfInts(0) = 2

changes indexed element 0 in your list from 5 (the original value of element 0) to 2. Also, int is a value type. Therefore, when you add SomeInt to the list, you have created a copy of the value type. The copy can be changed without affecting the original SomeInt.

You could start with:

Private ListOfInts As New List(Of Integer)

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

    ' processes

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

Maybe with a little more background on exactly what you are trying to do, I can help you get closer to your expectations.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号