Если ваши «роли» конечны и могут быть определены заранее (как кажется в вашем примере), вы можете использовать побитовый флаг enum для класса Person.
class Person {
[Flags]
public enum EnumRole {
None = 0,
Actor,
Director,
Producer,
Writer
}
public Person( EnumRole role ) {
Role = role;
}
public EnumRole Role { get; set; }
public bool CanDo( EnumRole role ) {
return (Role & role) != EnumRole.None;
}
}
Затем создайте своего человека с нужными ролями:
Person p = new Person(Person.EnumRole.Actor | Person.EnumRole.Director);
... и проверьте, играют ли они требуемую роль ...
bool canDoIt = p.CanDo(Person.EnumRole.Actor);