我有一个枚举和一个这样的功能
enum DaysOfWeek
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public void RunOnDays(DaysOfWeek days)
{
// Do your work here..
}
// Im Calling The Function like this and passing the parameters with Pipe Seprated
RunOnDays(DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
现在情景在我的用户界面中我有一些复选框,如星期一到星期日,用户可以选择所有日期或至少可以选择一个。我想将选定的值传递给我的函数RunOnDays。所以它可以是单值或多值。如何在选择用户时动态地将值传递给该方法。
答案 0 :(得分:5)
在枚举上使用[Flags]属性
[Flags]
enum DaysOfWeek
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public void RunOnDays(DaysOfWeek days)
{
// Do your work here..
}
答案 1 :(得分:3)
通过List<T>
或IEnumerable<T>
传递它们更容易。
public void RunOnDays(IEnumerable<DaysOfWeek> days)
{
// do something amazing
}
public void DoWork()
{
var days = new List<DaysOfWeek>();
// put each checked day into days
RunOnDays(days);
}
编辑:如果我正确理解了您的帖子,您就会问如何动态地将|
运算符应用于不确定的枚举列表,对吗?如果在不可修改的DLL中定义RunOnDays,则首先需要知道它是否支持复合枚举。如果是这样,您仍然可以使用IEnumerable方法并通过迭代进行组合。
DaysOfWeek checkedDays;
foreach (var day in days)
{
checkedDays |= day;
}
RunOnDays(checkedDays);
答案 2 :(得分:1)
好的,我不完全确定你需要知道什么,但我会猜测。
假设您每天都有一个复选框,名为mondayCheckbox
,tuesdayCheckbox
,依此类推。
现在,您希望获得一个int
值,该值表示选中了哪些复选框。
您可以按照以下方式执行此操作:
DaysOfWeek days = 0;
if (mondayCheckbox.Checked)
days |= DaysOfWeek.Monday;
if (tuesdayCheckbox.Checked)
days |= DaysOfWeek.Tuesday;
... And so on up to:
if (sundayCheckbox.Checked)
days | = DaysOfWeek.Sunday;
if (days != 0)
{
RunOnDays(days);
}
else
{
// Handle no days selected.
}
我认为您还应该在None
枚举中添加DaysOfWeek
:
[Flags]
enum DaysOfWeek
{
None = 0,
Sunday = 1,