C# 如何在.Net 3.5中枚举.GetValue?

C# 如何在.Net 3.5中枚举.GetValue?,c#,.net,pocketpc,C#,.net,Pocketpc,在.NET4.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

在.NET4.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(PocketPC)中如何实现这一点呢?
提前谢谢

我使用下面的答案,但它不适合我。代码如下:

枚举值:

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;
}

System.Enum.GetValues
在.NET CF 3.5上不受支持,您应该找到另一种方法来迭代枚举,例如,请查看以下内容:

有一篇博客文章(已存档)通过反射实现:

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;
}
public IEnumerable GetValues(枚举枚举)
{
列表枚举=新列表();
foreach(枚举.GetType()中的FieldInfo FieldInfo.GetFields(BindingFlags.Static | BindingFlags.Public))
{
添加((Enum)fieldInfo.GetValue(枚举));
}
返回枚举数;
}

除了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();
    }
}

我假设Pocket PC使用.NET Compact Framework?
var values = EnumHelper.GetValues<MyEnum>();