使用名称代替数字索引的数字

时间:2012-02-08 18:26:29

标签: c# arrays

我不记得下面的例子怎么做了。我忘了X(

所以如果SEASON系列有四个元素,{春,夏,秋,冬}

您可以通过......直接访问这些元素。

SEASON.spring或, SEASON.summer ......等等。

你也可以同时在下面做例子

季[1] 季节[2]等等......

SEASON不是一个班级。这是某种变量。

我会感谢您提供的任何指南:D

3 个答案:

答案 0 :(得分:2)

如果他们总是在同一个位置,你可以这样做:

enum Seasons {Spring, Summer, Fall, Winter};

通过以下方式访问其中一个季节的示例:

SeasonsArray[(int)Seasons.Spring]

答案 1 :(得分:2)

您可以使用enum作为数组索引(因此它仍然是一个数字,并且您明确指定从0到3的枚举值),或者使用Dictionary而不是{ {1}}。

然后,您将使用密钥访问您的数据:

array

答案 2 :(得分:2)

如果你想要这个功能并且想要避免强制转换,你可以为它编写自己的类。我希望能够在我正在处理的项目中使用enum轻松索引数组,因此我编写了一个简单的类来执行此操作:

public class ArrayEnumIndex<TEnum, TElement> : IEnumerable<TElement> 
    where TEnum : struct, IConvertible
{
    public int Length { get; }
    public TElement this[TEnum index] { get; set; }
    public void Clear();
    public void CopyTo(Array array, int index);
    public bool Exists(Predicate<TElement> match);
    public TEnum? FindIndex(Predicate<TElement> match);
    public IEnumerable<TEnum> FindAllIndices(Predicate<TElement> match);
    public IEnumerator<TElement> GetEnumerator();
}

您可以使用普通数组执行此操作,但我发现它更干净。因此,对于季节enum,您可以这样使用它:

ArrayEnumIndex<Seasons, int> seasons = new ArrayEnumIndex<Seasons, int>();
seasons[Seasons.Winter] = 0;

有一些缺点。您不能将泛型类型参数约束为enum(没有一些技巧),因此此类会执行一些运行时检查。它适用于基础类型为int且基于零的顺序值的枚举。