如何在.Net 3.5中枚举.GetValues
本文关键字:枚举 GetValues Net | 更新日期: 2023-09-27 18:20:17
在.Net 4.0中,我使用System.Enum.GetValues(typeof(Gender))
来获取枚举项的列表
在一个完整的例子中,我使用以下方式查找枚举值:
Gender retVal = Gender.Male;
foreach (Gender enumType in System.Enum.GetValues(typeof(Gender)))
{
if (enumType.ToString().Trim().ToUpper().Substring(0,1).Equals(stringToEnum.Trim().ToUpper()))
{
retVal = enumType;
break;
}
}
但是我怎么能在.Net 3.5(掌上电脑)中做到这一点呢
提前感谢!
我使用下面的答案,但它对我不起作用。这是代码:
枚举值:
namespace Ionic.Zlib
{
public enum CompressionLevel
{
Level0 = 0,
None = 0,
Level1 = 1,
BestSpeed = 1,
Level2 = 2,
Level3 = 3,
Level4 = 4,
Level5 = 5,
Level6 = 6,
Default = 6,
Level7 = 7,
Level8 = 8,
BestCompression = 9,
Level9 = 9,
}
}
用法:
我只是错过了初始化新对象。现在工作:
public static Ionic.Zlib.CompressionLevel GetCompressionLevel(string Expression)
{
Ionic.Zlib.CompressionLevel result = Ionic.Zlib.CompressionLevel.None;
foreach (Ionic.Zlib.CompressionLevel item in EnumGetValues(new Ionic.Zlib.CompressionLevel()))
{
if(object.Equals(item.ToString().Trim().ToUpper(), Expression.Trim().ToUpper()))
{
result = item;
break;
}
}
return result;
}
这里有一篇博客文章(存档于此),它通过反射实现了这一点:
public IEnumerable<Enum> GetValues(Enum enumeration)
{
List<Enum> enumerations = new List<Enum>();
foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
{
enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
}
return enumerations;
}
System.Enum.GetValues
在.NET CF 3.5上不受支持,您应该找到另一种方法来迭代枚举,例如,看看这里:
http://social.msdn.microsoft.com/forums/en-US/netfxcompact/thread/dbb6c1ff-935a-4fba-84a2-4cb6e892a61f/
除了shamp00的答案之外,我还建议创建一个带有泛型类型参数的静态方法。这样,您就不需要将枚举类型的变量传递给方法:
public static class EnumHelper
{
public static TEnum[] GetValues<TEnum>()
{
return typeof(TEnum)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Select(fieldInfo => (TEnum)fieldInfo.GetValue(null))
.ToArray();
}
}
通常我不喜欢类以"Helper"结尾,但只使用Enum
会与内置的Enum
-类发生冲突。
要使用此方法,只需使用您的枚举类型调用它:
var values = EnumHelper.GetValues<MyEnum>();