Почему целые числа должны быть преобразованы в строки, прежде чем их можно будет использовать для доступа к элементам коллекции?


Я новичок в VB вообще. Я просматриваю какой-то старый VB-код и вижу такие утверждения, как -

  Addr.AddrType(CStr(0)).A_Type = " "

Почему целое число 0 должно быть преобразовано в строку?

Обратите внимание, что Addr определяется как

 Public Addr As clsAddressDetail 

AddrType определяется как коллекция

 Public AddrType As New Collection
2 3
vb6

2 ответа:

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

Возвращает определенный элемент объекта коллекции либо по позиции или ключом . Только для чтения.

Default Public ReadOnly Property Item( _
ByVal { Key As String | Index As Integer | Index As Object } _ ) As Object

Параметры

Ключ

Уникальное строковое выражение, определяющее строку ключа, которая может использоваться вместо позиционного индекса для доступа к элементу коллекция. Ключ должен соответствовать ключевому аргументу указано, когда элемент был добавлен в коллекцию.

Индекс

(A) числовое выражение, определяющее положение элемента коллекции. Индекс должен быть числом от 1 до значения свойство Count коллекции (объект коллекции). Или (B) Объект выражение, определяющее позицию или строку ключа элемента коллекция.

Итак, если вы просите AddrType(0), вы просите нулевого члена коллекция, которая для этой коллекции на основе 1 является ошибкой. Но если вы просите AddrType("0"), Вы просите тот член, который был добавлен с ключом "0". Любая строка может быть использована в качестве ключа - просто конкретная строка, используемая здесь, является строковым представлением числа.

Кстати, стилистически я бы сказал, что писать CStr(0), а не "0" не особенно приятно...

Функция CStr() используется для доступа к определенному члену коллекции AddrType. На коллекции можно ссылаться либо по числовому индексу, либо по значению строкового ключа. Таким образом, короткий ответ состоит в том, что целые числа не должны быть преобразованы в строки для доступа к членам коллекции. Почему именно этот кодер решил использовать "0" для значения ключа, неизвестно; это, конечно, не более описательно, чем использование числового индекса, что было бы единственным преимуществом для строкового значения ключа.