Reputation: 37000
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
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
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