将多个枚举值传递给方法

时间:2013-06-04 12:23:04

标签: c# enums

我有一个枚举和一个这样的功能

        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。所以它可以是单值或多值。如何在选择用户时动态地将值传递给该方法。

3 个答案:

答案 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)

好的,我不完全确定你需要知道什么,但我会猜测。

假设您每天都有一个复选框,名为mondayCheckboxtuesdayCheckbox,依此类推。

现在,您希望获得一个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,