-
Или это чисто паскалевская штучка? Я имею в виду массивы вроде: type
TCarType = (ctLada, ctVAZ, ctAudi, ctMers, ctBMW, ctToyota, ctRenault);
var
MyArray: array[TCarType ] of <something>;
В C# перечислимый тип можно задать в частности так:
public enum CarType: int
А вот как бы создать на его базе массив, я не нашел. Может быть плохо искал?...
-
если члены енума монотонно возрастают, то чем это отличается от обычного индекса? только с нуля надо начинать
-
> А вот как бы создать на его базе массив, я не нашел.
А вроде никак
-
Юзай Hashtable или Dictionary - они для этого и нужны.
-
2 Игорь Шевченко © То есть мне не показалось. Я просто переводил здесь один компонент с Delphi на C# и обнаружил этот изъян C# (или преимущество Pascal). Так как в C# типы индексов вообще не оговариваются программистом (всегда подразумевается, что они целые и начинаются с нуля), то видимо невозможно получить свое ограничение на тип индекса в C#. Такое, чтобы компилятор требовал от выражения A[b], чтобы b было типа CarType или явно приведено к нему A[(CarType)b]
-
2 Alkid © (23.10.07 14:02) [3] Да я-то обошел эту проблему. Просто хотелось уточнить. Перечислимые типы в C# мне понравились, они не хуже паскалевских. И массивы по своим возможностям не хуже. Но вот эта негибкость в отношении индексации (фактическое отсутствие управления типом индекса) несколько испортила впечатление.
-
kaif © (23.10.07 14:12) [4]
> То есть мне не показалось.
Да, мы два года назад сталкивались с аналогичной проблемой, пытаясь синхронизировать перечислимый тип с некими его атрибутами (гуманным строковым представлением, еще чем-то).
-
Си изначально - язык "пониженного" уровня. Он создан техническими инженерами для технических инженеров. Там не должно быть столь высокоуровневых абстракций.
А Вирт хотел сделать язык, на котором можно программировать так же, как я бы объяснял на русском языке алгоритм, а не думать об устройстве процессора, и о том знает ли он мой перечисляемый тип. Имхо.
-
тест
-
Т.е. вы хотите сказать, что в Дельфи можно было создать массив с индексами, основанными на перечислении? Т.е. если имеем перечисление, как у автора, то получаем массив индексируемый с единицы? Но как же тогда быть, с тем что в шарпе строго говоря, можно задавать любые значения элементам перечисления? Как тогда на этом можно осуществлять индексирование массива? Если объявлено перечисление public enum DampfTemp : int
то как на его основе сделать индексы массива?
-
> Т.е. вы хотите сказать, что в Дельфи можно было создать > массив с индексами, основанными на перечислении? Т.е. если > имеем перечисление, как у автора, то получаем массив индексируемый > с единицы?
То есть, Delphi ты тоже не знаешь.
Массив индексируемый перечислимым типом начинается с Low(EnumerableType) и заканчивается High(EnumerableType)
-
> можно задавать любые значения элементам перечисления
более того, тут есть возможность использование необъявленного значения, например, позволяющая добавлять в enum новые значения, и при этом не перекомпилировать сборки, использующие предыдущие версии, при передачи параметра и ...
-
>>Галинка © (23.10.07 23:33) [9] Ну например так int[DampfTemp] ar; обращатся как ar[Cels] ar[Faring] Или вас интересует как это будет транслироватся компилятором? Так это его проблемы, имхо. Иногда я не хочу бумать о машинных кодах, а работать на более высоком уровне абстрации
-
vpbar © (25.10.07 11:25) [12]
нет. Меня интересует конкретный прецедент:
public enum{ TempCels = 100, TempFaring = 212 }
как на основе этого можно создать индекс массива? Массив вроде всегда с нуля. Или для этого будут элементам enum будут присвоены какие-то значения по умолчанию?
-
Игорь Шевченко © (24.10.07 10:32) [10]
не пришлось сталкиваться. Я вообще с массивами фиксированной длины мало имела опыта. В основном все как-то то файлы парсить надо было, то еще что, когда заранее не известно, сколько элементов массива надо. А потом для облегчения понимания стала чаще использовать структуры. Даже если только из однородных полей структура (запись то есть), то все равно есть более удобный механизм достучаться до конкретного элемента-поля, а не сидеть и не вспоминать. какой у него индекс должен быть (((
-
пардон. 13 снимается. Т.е. это есть своего рода уход от (создающих трудности) цифровых индексов. А значения, которые присвоены элементам перечисления роли не играют, хоть -10 и 25683. Все равно получится массив из двух элементов.
тогда может есть способ как-то вывернуться через typedef? Ну там определяешь запись, и что туда подставляется. Ведь как-то же это в дельфи реализовано?
-
> хоть -10 и 25683. Все равно получится массив из двух элементов
Hashtable
-
> Hashtable
устарел. Dictionary, SortedDictionary, SortedMap.
-
> SortedMap.
наверное всё-таки SortedList =)
-
> [17] ferr (02.11.07 13:28) > > Hashtable > > устарел.
Public Class Hashtable Implements IDictionary,
к тому же, не все еще под .net 2 работают
-
> к тому же, не все еще под .net 2 работают
многие уже под 3.0 ;)
-
> Hashtable
когда очень большой, тормозит. на налодонниках.
-
Удалено модератором
|