-1

我有一个枚举和一个这样的函数

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

4

3 回答 3

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..
}
于 2013-06-04T12:25:39.257 回答
3

通过 aList<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);
}

编辑:如果我正确理解您的帖子,您是在问如何将|运算符动态应用于不确定的枚举列表,对吗?如果 RunOnDays 定义在不可修改的 DLL 中,您首先需要知道它是否支持复合枚举。如果是这样,您仍然可以使用 IEnumerable 方法并通过迭代进行组合。

DaysOfWeek checkedDays;

foreach (var day in days)
{
    checkedDays |= day;
}

RunOnDays(checkedDays);
于 2013-06-04T12:24:39.723 回答
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,
于 2013-06-04T12:58:50.767 回答