Search code examples
c#enum-flags

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?


Solution

  • 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.