简体   繁体   中英

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?

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.

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();

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM