以下是我的Enumerator List
:
public enum StatusEnum
{
Open = 1,
Rejected = 2,
Accepted = 3,
Started = 4,
Completed = 5,
Cancelled = 6,
Assigned = 7
}
我需要将其绑定到Combobox
,但是,只显示一些特定的状态而忽略其余的状态。
这是我到目前为止所拥有的:
public static List<Activity.StatusEnum> StatusList()
{
IEnumerable<Activity.StatusEnum> query = Enum.GetValues(typeof(Activity.StatusEnum)).Cast<Activity.StatusEnum>()
.Where(x => x == Activity.StatusEnum.Open
|| x == Activity.StatusEnum.Rejected
|| x == Activity.StatusEnum.Accepted
|| x == Activity.StatusEnum.Started);
return query.ToList();
}
但是,我觉得代码有点混乱,并且不是将过滤的Enum
列表绑定到Combobox
的正确方法。
任何人都可以提出更强有力的方法吗?
我可能需要更改选择顺序。所以我需要一个通用的解决方案,它不仅能获得前X个状态。
答案 0 :(得分:36)
return Enum.GetValues(typeof(Activity.StatusEnum)).Cast<Activity.StatusEnum>().Where((n, x) => x < 4);
如果您希望能够更改项目列表,只需将其添加到List<Activity.StatusEnum>
并使用Contains
:
var listValid = new List<Activity.StatusEnum>() { Activity.StatusEnum.Open, Activity.StatusEnum.Rejected, Activity.StatusEnum.Accepted, Activity.StatusEnum.Started };
return Enum.GetValues(typeof(Activity.StatusEnum)).Cast<Activity.StatusEnum>().Where(n => listValid.Contains(n));
答案 1 :(得分:11)
如果您要对列表中应该包含的项进行硬编码,为什么不这样做呢:
public static List<Activity.StatusEnum> StatusList()
{
return new List<Activity.StatusEnum>
{
Activity.StatusEnum.Open,
Activity.StatusEnum.Rejected,
Activity.StatusEnum.Accepted,
Activity.StatusEnum.Started
};
}
您也可以处置List<T>
并返回数组本身。只要您知道这些是您想要的项目,那么Linq就没有必要了。
答案 2 :(得分:7)
<强>步骤:强>
enum
值并将结果转换为enum
enum
值按其整数值排序(否则排序
自然地通过无符号量级)<强>代码:强>
return Enum.GetValues(typeof(Activity.StatusEnum))
.Cast<Activity.StatusEnum>()
.OrderBy(se =>(int)se)
.Take(4);
<强>输出:强>
Open Rejected Accepted Started
答案 3 :(得分:6)
首先,如果可能的话,我会将你的枚举值设为2,所以它们可以一起进行“或”运算。
public enum StatusEnum
{
Open = 1,
Rejected = 2,
Accepted = 4,
Started = 8,
Completed = 16,
Cancelled = 32,
Assigned = 64
}
然后你可以这样做:
public static List<Activity.StatusEnum> StatusList()
{
var statusesToShow = Activity.StatusEnum.Open | Activity.StatusEnum.Rejected | Activity.StatusEnum.Accepted | Activity.StatusEnum.Started;
return Enum
.GetValues(typeof(Activity.StatusEnum))
.Cast<Activity.StatusEnum>()
.Where(x => (x & statusesToShow) == x)
.ToList();
}
编辑:鉴于您无法更改枚举值,我建议您使用以下内容:
public static List<Activity.StatusEnum> StatusList()
{
return new List<Activity.StatusEnum> {
Activity.StatusEnum.Open,
Activity.StatusEnum.Rejected,
Activity.StatusEnum.Accepted,
Activity.StatusEnum.Started
};
}
答案 4 :(得分:5)
&#34 ;. 。 。只显示前4个状态而忽略其余部分。&#34;
要获取n
的第一个IEnumerable<T>
元素,请使用Take
方法:
return Enum.GetValues(typeof(Activity.StatusEnum))
.Cast<Activity.StatusEnum>()
.Take(4)
.ToList();
答案 5 :(得分:3)
如何处理以下内容:
.Where(x => x <= Activity.StatusEnum.Started)