列表中的枚举值

时间:2012-06-28 07:49:24

标签: c# asp.net

我有一个类似的枚举类,

public enum USERTYPE
{
   Permanant=1,
   Temporary=2,
}

在我的业务对象中,我只是将此枚举声明为

private List<USERTYPE> userType=new List<USERTYPE>;

在get / set方法中,我尝试了

public List<USERTYPE> UserType
    {
        get 
        {
            return userType;
        }
        set
        { 
            userType= value; 
        }
    }

这里它将行的no返回为0,如何在这里获取Enum中的所有值,任何人都可以帮助我...

5 个答案:

答案 0 :(得分:17)

您可以使用它来获取所有单独的枚举值:

private List<USERTYPE> userTypes = Enum.GetValues(typeof(USERTYPE)).Cast<USERTYPE>().ToList();

如果你经常这样做,你可以为它创建一个通用的实用方法:

public static T[] GetEnumValues<T>() where T : struct {
    if (!typeof(T).IsEnum) {
        throw new ArgumentException("GetValues<T> can only be called for types derived from System.Enum", "T");
    }
    return (T[])Enum.GetValues(typeof(T));
}

答案 1 :(得分:5)

GetValues会返回System.Array,但我们知道它真的是TEnum[](这是一个从零开始索引的一维数组),其中TEnumUSERTYPE在你的情况下。因此使用:

var allUsertypeValues = (USERTYPE[])Enum.GetValues(typeof(USERTYPE));

答案 2 :(得分:2)

你所拥有的基本上是枚举列表。不是枚举中的单个项目。

获取可以执行的枚举值列表

string[] str = Enum.GetNames(typeof(USERTYPE));

在get / set返回字符串[]而不是List&lt;&gt;中使用

public string[] UserType
{
    get 
    {
        return Enum.GetNames(typeof(USERTYPE));
    }
}

我认为set在这里不起作用,因为你不能在运行时在枚举中添加值。

答案 3 :(得分:2)

如果您想从列表user.UserType中获取特定的枚举值,则首先需要Add枚举此列表的值:

var user = new User();
//1 value - PERMANENT
user.UserType.Add(USERTYPE.Permanent);

但是,如果您只需要从任意enum获取所有可能的值,那么您可以尝试Enum.GetValues

//2 values - Permanant and Temporary
var enums = Enum.GetValues(typeof(USERTYPE));

答案 4 :(得分:2)

UserType你可以尝试一下,

 UserType = Enum.GetValues(typeof(USERTYPE)).OfType<USERTYPE>().ToList();