使用名称而不是数字作为数组的索引
本文关键字:数组 索引 数字 | 更新日期: 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
的枚举,具有从零开始的顺序值。