我有多么相当于一个多维数组.
int[][][] MyValues;
我想要的是通过强类型的equivelent访问索引,例如枚举.我知道你可以从Enum类型中获取枚举值,但是我的口味有点长.
我宁愿有办法强力键入索引.
例如:
int CarNumber = MyValues[Racetrack.Daytona][Race.Daytona500][Driver.JGordon];
由于它是枚举式的,因此可以防止任何超出范围的异常被抛出,而且它为所有索引提供了一个很好的人类可读意义.
我已经使用字典方法实现了这一点,但它似乎有点沉重:
Dictionary>> = new Dictionary >>();
然后我可以通过枚举访问,但我真的不喜欢这种方法.这看起来很"难看".
我正在寻找一些替代方法,在使用人类可读的索引器时表示基本上是多维数组,同时保持类型安全(例如,不能无意中使用Race作为Race,所以简单地使用consts不是好方法).
有什么建议?
这将是一个编译时数组(上面的例子不是真实的,只是一个例子)所以我不必担心插入或删除或其他操作的数组.它将在价值,大小和布局方面保持不变.
使用带有const值的静态类也不是一个好方法,因为它不强制只有定义的值集可以作为索引器传递.
听起来你想要使用索引器而不是数组.假设以下枚举(基于公式1!):
public enum Track { Spielberg, Adelaide, Casablanca, Liverpool, Melbourne, Berlin, Sakhir, } public enum Constructor { BMW, Ferrari, McLaren, Toyota, Williams } public enum Driver { Hamilton, Kovalainen, Raikkonen, Nakajima, Glock }
基本结构如下:
public class Race { int Year { get; set; } Track Track { get; set; } Driver[] Placings { get; set; } public int this[Driver driver] { } // placing by driver } public class Results { YearResults this[int index] { } DriverResults this[Driver index] { } TrackResults this[Track index] { } ConstructorResults this[Constructor index] { } } public class YearResults { YearDriverResults this[Driver index] { } }
这当然是部分实现,但你可以通过这种方式对索引器做一些非常酷的事情.就像您可以使用任何顺序的任意值组合访问您的信息(假设您设置了所有中间类).
它比一个多维数组或一个元组键控词典更啰嗦,但我认为它会给你更优雅的代码.