У меня есть то, что составляет многомерный массив.
int[][][] MyValues;
Я хочу получить доступ к индексам через строго типизированный эквивалент, такой как перечисление. Я знаю, что вы можете получить значения перечисления из типа Enum, но это немного затянуто для моих вкусов.
Я бы предпочел иметь способ строго набирать индексы.
Например:
int CarNumber = MyValues[Racetrack.Daytona][Race.Daytona500][Driver.JGordon];
Это, в силу того, что это enum-like, предотвратит выбрасывание любых исключений вне пределов, плюс оно придает всем индексам приятный для восприятия человеком смысл.
Я реализовал это, используя словарный подход, но это выглядит довольно жестко:
Dictionary<Racetrack,Dictionary<Race,<Dictionary<Driver,int>>> =
new Dictionary<Racetrack,Dictionary<Race,<Dictionary<Driver,int>>>();
, к которому я могу получить доступ через перечисления, но мне не очень нравится этот подход. Это кажется "некрасивым".
Я ищу несколько альтернативных методов для представления того, что по сути является многомерным массивом, с использованием удобочитаемых человеком индексаторов, при сохранении безопасности типов (например, нельзя случайно использовать драйвер для гонки, просто использование consts не очень хороший подход).
Есть предложения?
Это будет массив времени компиляции (приведенный выше пример не является реальным, просто иллюстрация), поэтому мне не нужно беспокоиться о вставках, удалениях или других манипуляциях с массивом. Он останется неизменным как по значениям, так и по размеру и макету.
Использование статического класса с константными значениями также не является подходящим подходом, поскольку не требует, чтобы в качестве индексаторов передавался только определенный набор значений.