2010-11-12 80 views
0

VB.NET 2010,.NET 4VB.NET指針值類型

您好所有,

我決不是一個優秀的程序員,我只是想環繞一些我的頭這個東西,所以請原諒我,如果這是一個愚蠢的問題。

我想下面產生一個消息框,上面寫着「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只是添加一個副本。如果這是不連貫的,我很抱歉。有沒有簡單的方法來完成這個?

由於提前, 布賴恩

編輯:「這是不是嘗試做一件好事,」我只是想補充一點,我懷疑folks'll說:「爲什麼嘗試這樣做」 /等等。我對此有所瞭解,並希望知道更好的方法,但是,我也普遍好奇這樣的事情可能會如何完成,無論是不是好的做法。另外,如果這不是好的做法(無論這意味着什麼),爲什麼?

回答

1

這是輸出5,因爲你是MSGBOX引用SomeIntSomeListOfInts(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 

也許對正是你正在嘗試做多一點背景,我可以幫助你接近滿足您的期望。

+0

「副本可以改變而不影響原始」的事實正是我的問題。我*要*影響原件。我想我想要的是一個將*引用*存儲爲整數的列表,以便我可以通過像SomeListOfInts(0)= 2 *改變原始變量而不是改變副本。 – 2010-11-12 00:50:13

+0

本質上,我想要SomeListOfInts(0)= 2的行來將SomeInt的值更改爲2.我一直在閱讀關於IntPtr的內容,但它超出了我的頭,並且超出了我想嘗試的範圍。 – 2010-11-12 00:51:35