2010-11-12 46 views
0

de VB.NET 2010, .NET 4VB.NET pointeur sur les types de valeur

Bonjour à tous,

Je suis pas un bon programmeur et je suis juste essayer d'envelopper la tête autour de certains de ce genre de choses, alors s'il vous plaît pardonnez-moi si c'est une question stupide.

Je veux ce qui suit pour produire une boîte de message qui dit "2", pas "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 

Cela ne fonctionne pas. La boîte de message dit "5". Je pense que je comprends pourquoi dans une certaine mesure. Puisque SomeInt est un type de valeur, l'ajouter à SomeListOfInts ajoute simplement une copie. Je suis désolé si c'est incohérent. Y a-t-il un moyen simple d'accomplir ceci?

Merci à l'avance, Brian

Edit: Je voulais juste ajouter, je pense folks'll dire « Pourquoi essayer de le faire »/« Ceci est une bonne chose pour essayer de le faire. » Je suis d'accord avec cela et je voudrais savoir une meilleure approche s'il y en a une, mais je suis aussi génériquement curieux de savoir comment quelque chose comme ça pourrait être fait, que ce soit une bonne pratique ou non. Aussi, si ce n'est pas une bonne pratique (quoi que cela signifie), pourquoi?

Répondre

1

Il est sortie 5 parce que votre MsgBox fait référence SomeInt, pasSomeListOfInts(0)

Essayez ceci:

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 

... Ce

SomeListOfInts(0) = 2 

changements élément indexés 0 dans votre liste de 5 (la valeur d'origine de l'élément 0) à 2. En outre, int est une valeur type. Par conséquent, lorsque vous ajoutez SomeInt à la liste, vous avez créé une copie du type de valeur. La copie peut être modifiée sans affecter l'original SomeInt.

Vous pouvez commencer par:

ListOfInts privé en tant que nouvelle liste (INTEGER)

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

    ' processes 

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

Peut-être avec un peu plus d'information sur exactement ce que vous essayez de faire, je peux vous aider à se rapprocher à vos attentes.

+0

Le fait que "la copie puisse être modifiée sans affecter l'original" est exactement mon problème. Je * veux * affecter l'original. Je pense que ce que je veux, c'est une liste qui stockerait * références * aux entiers de sorte que je puisse changer la variable d'origine via quelque chose comme SomeListOfInts (0) = 2 * au lieu * de changer une copie. –

+0

Essentiellement, je veux la ligne SomeListOfInts (0) = 2 pour changer la valeur de SomeInt à 2. J'ai lu sur IntPtr, mais c'est sur ma tête et certainement au-delà du domaine de ce que je veux essayer. –