使用名称而不是数字作为数组的索引

本文关键字:数组 索引 数字 | 更新日期: 2023-09-27 18:23:53

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

因此,如果一个集合季节有四个元素,{春,夏,秋,冬}

您可以通过以下方式直接访问这些元素...

季节.春天或,季节.夏天...等等。

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

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

季节不是一个类。它是某种变量。

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

使用名称而不是数字作为数组的索引

如果它们始终处于同一位置,您可以执行以下操作:

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

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

SeasonsArray[(int)Seasons.Spring]
您可以使用

enum作为数组索引(因此它仍然是一个数字,并且显式指定从 0 到 3 的枚举值(,也可以使用 Dictionary 而不是 array

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

Dictionary<string, YourCurrentArrayType> dic = new Dictionary<string, YourCurrentArrayType>();
dic.Add("Summer", ...);
dic.Add("Spring", ...);
...
var obj = dic["Summer"];
var obj2 = dic["Spring"];

如果你想要此功能并且想要避免强制转换,你可以为它编写自己的类。 我希望能够在我正在处理的项目中使用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的枚举,具有从零开始的顺序值。