How do you pass multiple enum values in C#?

后端 未结 10 1903
灰色年华
灰色年华 2020-11-29 16:50

Sometimes when reading others\' C# code I see a method that will accept multiple enum values in a single parameter. I always thought it was kind of neat, but never looked in

10条回答
  •  生来不讨喜
    2020-11-29 16:57

    When you define the enum, just attribute it with [Flags], set values to powers of two, and it will work this way.

    Nothing else changes, other than passing multiple values into a function.

    For example:

    [Flags]
    enum DaysOfWeek
    {
       Sunday = 1,
       Monday = 2,
       Tuesday = 4,
       Wednesday = 8,
       Thursday = 16,
       Friday = 32,
       Saturday = 64
    }
    
    public void RunOnDays(DaysOfWeek days)
    {
       bool isTuesdaySet = (days & DaysOfWeek.Tuesday) == DaysOfWeek.Tuesday;
    
       if (isTuesdaySet)
          //...
       // Do your work here..
    }
    
    public void CallMethodWithTuesdayAndThursday()
    {
        this.RunOnDays(DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
    }
    

    For more details, see MSDN's documentation on Enumeration Types.


    Edit in response to additions to question.

    You won't be able to use that enum as is, unless you wanted to do something like pass it as an array/collection/params array. That would let you pass multiple values. The flags syntax requires the Enum to be specified as flags (or to bastardize the language in a way that's its not designed).

提交回复
热议问题