2012-11-10 34 views
1

我有以下枚舉:獲得通過指數關係枚舉在C#

public enum UserRole { 
    Admin = 1, 
    Leader = 2, 
    Editor = 3, 
    Guest = 4 
} // UserRole 

而且下面的列表:

IList<UserRole> roles = new List<UserRole> { UserRole.Leader, UserRole.Editor }; 

我想創建兩個新的列表:

1 - 一個列表,用於選取角色中最低的索引項,例如UserRole.Leader = 2和所有UserRoles。所以,我會得到:

UserRole.Leader, UserRole.Editor, UserRole.Guest 

2 - 即挑選角色中指數最高的項目,如列表,UserRole.Editor = 3和所有比一個低的UserRole。所以我會得到:

UserRole.Admin, UserRole.Leader, UserRole.Editor 

我該怎麼做?

謝謝你, 米格爾

+0

LINQ可以使用 ? –

回答

3

如何

public enum UserRole 
{ 
    Admin = 1, 
    Leader = 2, 
    Editor = 3, 
    Guest = 4 
} 

IList<UserRole> roles = new List<UserRole> { UserRole.Leader, UserRole.Editor }; 

var min = roles.Min(); 

var max = roles.Max(); 

var result1 = Enum.GetValues(typeof(UserRole)).Cast<UserRole>() 
        .Where(x => x >= min); 

var result = Enum.GetValues(typeof(UserRole)).Cast<UserRole>() 
       .Where(x => x <= max); 
2

您可以枚舉使用Enum.GetValues(typeof(UserRole)));所以答案應該是枚舉:

IList<UserRole> GetHigherRoles(UserRole role) 
{ 
    var roles = new List<UserRole>(); 
    foreach (var r in Enum.GetValues(typeof(UserRole))) 
    { 
     if ((UserRole)r >= role) 
     { 
      roles.Add((UserRole)r); 
     } 
    } 
    return roles; 
} 

IList<UserRole> GetLowerRoles(UserRole role) 
{ 
    var roles = new List<UserRole>(); 
    foreach (var r in Enum.GetValues(typeof(UserRole))) 
    { 
     if ((UserRole)r <= role) 
     { 
      roles.Add((UserRole)r); 
     } 
    } 
    return roles; 
}