下面是我的枚举器列表
:
public enum StatusEnum
{
Open = 1,
Rejected = 2,
Accepted = 3,
Started = 4,
Completed = 5,
Cancelled = 6,
Assigned = 7
}
我需要将它绑定(bind)到 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
列表绑定(bind)到 Combobox
的正确方法。
任何人都可以建议一种更可靠的方法吗?
更新
我可能需要更改选择顺序。所以我需要一个通用的解决方案,它不仅可以获得前 X 个状态。
最佳答案
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));
关于c# - 如何对 Enum 执行 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091917/