c# – 查找枚举中的最高值
发布时间:2020-12-15 18:34:20 所属栏目:百科 来源:网络整理
导读:我正在编写一个确定.NET枚举中最高值的方法,因此我可以为每个枚举值创建一个BitArray: pressedKeys = new BitArray(highestValueInEnumKeys()); 我需要两个不同的枚举,所以我把它变成了一个通用的方法: /// summaryReturns the highest value encountered
我正在编写一个确定.NET枚举中最高值的方法,因此我可以为每个枚举值创建一个BitArray:
pressedKeys = new BitArray(highestValueInEnum<Keys>()); 我需要两个不同的枚举,所以我把它变成了一个通用的方法: /// <summary>Returns the highest value encountered in an enumeration</summary> /// <typeparam name="EnumType"> /// Enumeration of which the highest value will be returned /// </typeparam> /// <returns>The highest value in the enumeration</returns> private static int highestValueInEnum<EnumType>() { int[] values = (int[])Enum.GetValues(typeof(EnumType)); int highestValue = values[0]; for(int index = 0; index < values.Length; ++index) { if(values[index] > highestValue) { highestValue = values[index]; } } return highestValue; } 如您所见,我将Enum.GetValues()的返回值转换为int [],而不是EnumType [].这是因为我以后不能将EnumType(这是一个泛型类型参数)转换为int. 代码有效.但它有效吗? 解决方法
不,你不能安全地转换为int [].枚举类型并不总是使用int作为基础值.如果你将自己局限于具有基础类型int的枚举类型,那么它应该没问题.
这就像你(或我)可以扩展Unconstrained Melody来支持你想要的东西 – 在编译时真正地将类型限制为枚举类型,并且适用于任何枚举类型,甚至是那些具有底层基础的类型,例如long和ulong. 如果没有Unconstrained Melody,您仍然可以使用所有枚举类型有效地实现IComparable的事实以一般方式执行此操作.如果您使用的是.NET 3.5,它就是一个单行程序: private static TEnum GetHighestValue<TEnum>() { return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Max(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |