Search code examples
c#enumsbitflags

Check if Flags Enum containts all strings


I have the following flags Enum:

[Flags]
public enum RoleModels {
  Master = 1 << 0,
  Editor = 1 << 1,
  Member = 1 << 2
}

And I have a RoleModels variable and a list of strings:

var roles1 = RoleModels.Master | RoleModels.Member;

List<String> rolesStrings = new List<String> { "mAster", "Member" }

I would like to check if all rolesStrings are in roles.

The check should be case insensitive ... In this case it will be true.

I was trying to convert the strings to one enum:

var roles2 = (RoleModels)rolesStrings.Aggregate((a, b) => a | b);

And then check, somehow, if all roles2 are in roles1.

But I wasn't able to make this work ...

Could someone, please, help me out?

Thank You, Miguel


Solution

  • You can do it like this:

    var roles1 = RoleModels.Master | RoleModels.Member;
    List<String> rolesStrings = new List<String> { "mAster", "Member" }
    
    bool hasFlag = true;
    foreach (var role in rolesStrings)
    {
        RoleModels enumValue;
    
        if (!(Enum.TryParse(role,true, out enumValue) && roles1.HasFlag(enumValue)))
        {
            hasFlag = false;
            break;
        }
    }
    

    Here is the fiddle