MakePeaceGreatAgain
MakePeaceGreatAgain

Reputation: 37000

restrict possible combination of Flags

is there a way to combine flags within an Enum but to restrict the possible combinations? I have an enum like this:

[Flags]
public enum CopyFlags
{
    /// <summary>
    /// Copy members regardless of their actual case
    /// </summary>
    CaseSensitive = 1,
    /// <summary>
    /// Indicates if a leading underscore (e.g. _myMember) should be ignored while comparing member-names.
    /// </summary>
    IgnoreLeadingUnderscore = 2,
    /// <summary>
    /// Indicates if only properties should be copied. Usefull when all technical data is stored in properties. 
    /// </summary>
    PropertiesOnly = 4
}

Now I want to also introduce a FieldsOnly-value but ensure that it is only used when PropertiesOnly is not present. Is this possible?

Upvotes: 0

Views: 695

Answers (2)

Brian Mains
Brian Mains

Reputation: 50728

No, it's not possible within the context of the enum; instead, you'd have to validate it:

public void DoSomething(CopyFlag flag)
{
   if (flag.HasFlag(CopyFlags.PropertiesOnly) && flag.HasFlag(CopyFlags.FieldsOnly))
      throw new ArgumentException();

}

Upvotes: 1

Sam Harwell
Sam Harwell

Reputation: 99859

No, it is not possible. It's not even possible to restrict the values to being the items listed. For example, the following is allowed in C#:

CopyFlags flags = (CopyFlags)358643;

You need to perform your validation explicitly inside of the methods which include a CopyFlags parameter.

Upvotes: 4

Related Questions