Kas*_*dum 402
您可以使用static方法Enum.GetNames返回一个数组,该数组表示枚举中所有项的名称.此数组的length属性等于枚举中定义的项数
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
Run Code Online (Sandbox Code Playgroud)
Tim*_*lds 171
问题是:
如何获取枚举中定义的项目数?
"项目"的数量可能真的意味着两件完全不同的东西.请考虑以下示例.
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
Run Code Online (Sandbox Code Playgroud)
定义的"项目"数量是多少MyEnum?
物品数量是5?(A,B,C,D,E)
还是3?(1,2,3)
(5)中定义的名称数量MyEnum可以如下计算.
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
Run Code Online (Sandbox Code Playgroud)
(3)中定义的值的数量MyEnum可以如下计算.
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
Run Code Online (Sandbox Code Playgroud)
Jos*_*osh 14
我在C回答这个问题时看到的一个漂亮的技巧,只需在枚举中添加最后一个元素并使用它来说明枚举中有多少元素:
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
Run Code Online (Sandbox Code Playgroud)
在您定义0以外的起始值的情况下,可以使用NumberOfTypes - Type1来确定元素的数量.
我不确定这种方法是否比使用Enum更快,而且我也不确定它是否被认为是正确的方法,因为我们让Enum为我们确定这些信息.
小智 13
我今天运行了一个基准测试并得出了有趣的结果。在这三个中:
var count1 = typeof(TestEnum).GetFields().Length;
var count2 = Enum.GetNames(typeof(TestEnum)).Length;
var count3 = Enum.GetValues(typeof(TestEnum)).Length;
Run Code Online (Sandbox Code Playgroud)
GetNames(enum) 是迄今为止最快的!
| Method | Mean | Error | StdDev |
|--------------- |---------- |--------- |--------- |
| DeclaredFields | 94.12 ns | 0.878 ns | 0.778 ns |
| GetNames | 47.15 ns | 0.554 ns | 0.491 ns |
| GetValues | 671.30 ns | 5.667 ns | 4.732 ns |
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用Enum.GetNames在枚举中返回IEnumerable值,然后使用.Count生成IEnumerable.
GetNames产生的结果与GetValues大致相同,但速度更快.
从以前的答案中只添加代码示例.
class Program
{
static void Main(string[] args)
{
int enumlen = Enum.GetNames(typeof(myenum)).Length;
Console.Write(enumlen);
Console.Read();
}
public enum myenum
{
value1,
value2
}
}
Run Code Online (Sandbox Code Playgroud)
如果您发现自己像我一样经常编写上述解决方案,则可以将其作为通用实现:
public static int GetEnumEntries<T>() where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
return Enum.GetNames(typeof(T)).Length;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196195 次 |
| 最近记录: |