VB.NET Указатель на типы значений - PullRequest
0 голосов
/ 12 ноября 2010

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 просто добавляет копию.Извините, если это бессвязно.Есть ли какой-нибудь простой способ сделать это?

Заранее спасибо, Брайан

Редактировать: Я просто хотел добавить, я подозреваю, что люди скажут "Зачем пытаться это сделать?" / "Это не очень хорошая попытка. "и т.д. Я согласен с этим и хотел бы узнать лучший подход, если таковой существует, однако мне также любопытно, как это можно сделать, будь то хорошая практика или нет.Кроме того, если это не хорошая практика (что бы это ни значило), почему?

1 Ответ

1 голос
/ 12 ноября 2010

Это вывод 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

Может быть, немного больше информации о том, что вы пытаетесь сделать, я могу помочь вам приблизиться к вашим ожиданиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...