Константы перечисления в виде индексов массива в VB6

#vb6

#vb6

Вопрос:

Я определяю перечисление, которое в конечном итоге может использоваться как индекс массива, подобный этому…

 Public Enum MY_ENUM
    THIS_ENUM_VALUE = 1
    THAT_ENUM_VALUE
    THE_OTHER_ENUM_VALUE
    MAXIMUM_ENUM_VALUE = THE_OTHER_ENUM_VALUE
End Enum
  

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

 Dim my_array(MAXIMUM_ENUM_VALUE) As Integer
  

будут увеличены по мере необходимости.

Мой вопрос: должен ли я это делать, и если нет, что бы вы предложили?

Комментарии:

1. Похоже, вы храните разные данные в разных столбцах 2D-массива? Возможно, вместо этого вам следует использовать структуры ( Type ) или объекты ( Class )?

2. @MarkJ, спасибо за совет, но я просто использую эти перечисления в качестве индексов массива; Я бы сказал, что myarray(FRONT) и myarray(BACK) , например, предпочтительнее, чем myarray(1) и myarray(2) .

3. В таком случае почему бы и нет myarray(LBound(myarray)) и myarray(UBound(myarray)) ? Я все еще не понимаю необходимости перечислений — конечно, это мог быть я

Ответ №1:

Обратите внимание, что в VB6 также довольно типично использовать «скрытые значения перечисления», подобные этому:

 Public Enum MY_ENUM
    THIS_ENUM_VALUE = 1
    THAT_ENUM_VALUE
    THE_OTHER_ENUM_VALUE
    [_first] = THIS_ENUM_VALUE 
    [_last] = THE_OTHER_ENUM_VALUE
End Enum
  

Вы могли бы объединить это с другими предложениями:

 Public Enum MY_ENUM
    [_first]
    THIS_ENUM_VALUE
    THAT_ENUM_VALUE
    THE_OTHER_ENUM_VALUE
    [_last]
End Enum

Dim MyArray(MY_ENUM.[_first] To MY_ENUM.[_last]) As MY_ENUM
  

Ответ №2:

Я думаю, что это правильный путь. Если вы поступите так, как вы описали, перечисление может быть расширено без нарушения кода.

Единственное, что я вижу, что нужно сделать, это сообщить другим, которые используют ваш код для объявления массивов на основе перечисления, чтобы они использовали MAXIMUM_ENUM_VALUE вместо добавленного ими значения enum (в данном случае, THE_OTHER_ENUM_VALUE ).

Ответ №3:

Практика заключается в том, что мы используем объявление типа

 Public Enum MY_ENUM
    THIS_ENUM_VALUE = 1
    THAT_ENUM_VALUE
    THE_OTHER_ENUM_VALUE
    MAXIMUM_ENUM_VALUE
End Enum
  

и вам даже не нужно редактировать последнее объявление 🙂 Уверен, что ваши массивы на один элемент длиннее, чем необходимо, но, ИМХО, это не большая проблема.