Для каждой переменной, действующей как локальная переменная? - PullRequest
1 голос
/ 21 апреля 2011

Я наткнулся на то, что не совсем понимаю логику.Давайте поработаем со следующим фрагментом кода:

For Each ds As DerivedScale In List
    If ds.ScaleID = scaleId Then
        ds.ScaleID = ds.ScaleID + scaleStep
        CType(List(myCounter + scaleStep), DerivedScale).ScaleID = scaleId
        myDerivedScale = ds
        ds = List(myCounter + scaleStep)          <---------------------
        List(myCounter + scaleStep) = myDerivedScale
        Exit For
    End If
    myCounter += 1
Next

Этот фрагмент написан для 2 записей, чтобы изменить место и изменить порядковый номер (scaleid).Стрелка указывает, где возникает проблема.Элемент "ds" заменяется индексом объекта 1 выше / ниже.Это, однако, не влияет на этот объект в списке.Поэтому, когда я проверяю, пункт ds не установлен.

Однако, когда я смотрю на ds.ScaleId = ds.ScaleID + scaleStep, это отражается в списке.

Так что мне интересно, является ли "ds" действующим как локальныйпеременная здесь, и я могу только вносить изменения в ее свойства?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 21 апреля 2011

ds - это ссылка на объект, на который также ссылается список.Поэтому, когда вы устанавливаете свойства для него, эти изменения также отражаются в списке.Но поскольку ds является просто ссылкой, как вы предполагаете, изменение того, к чему оно относится, не повлияет на список.

1 голос
/ 21 апреля 2011

Вам нужно перебирать список по индексу, а не по счетчику (все, что вы получаете, это ссылка здесь).Затем вы можете поменять объекты по индексу и изменить их свойства.

0 голосов
/ 21 апреля 2011

Эта переменная находится в цикле, в котором она объявлена.Переназначение ds не изменит список, потому что и ds, и список имеют ссылку на объект для некоторого элемента, вы просто изменяете, к какому элементу относится ds, не влияя на список.

0 голосов
/ 21 апреля 2011

Объекты в .Net передаются по ссылке.

В вашем списке есть один экземпляр DerivedScale;цикл For Each повторяет те же экземпляры, что и в списке.
Копии не создаются;вы модифицируете сами объекты.

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