13

我有一个枚举类,例如,

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

在这里它返回行数为0,我怎样才能在这里获得枚举中的所有值,任何人都可以在这里帮助我......

4

5 回答 5

29

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

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));
}
于 2012-06-28T07:54:08.810 回答
5

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

var allUsertypeValues = (USERTYPE[])Enum.GetValues(typeof(USERTYPE));
于 2012-06-28T08:02:03.950 回答
4

UserType你能试试吗,

 UserType = Enum.GetValues(typeof(USERTYPE)).OfType<USERTYPE>().ToList();
于 2012-06-28T12:54:42.640 回答
2

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

要获取枚举值列表,您可以执行

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

在 get/set 中使用 return string[] 而不是 List<>

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

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

于 2012-06-28T07:51:09.637 回答
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));
于 2012-06-28T08:00:48.727 回答