VB.NET Указатель на типы значений

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 ответ

Решение

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

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

Другие вопросы по тегам