2012-05-07 13 views
0
public enum RoleType 
{ 
    Supervisor, 
    Administrator, 
    User, 
    UserPhone, 
    Operator 
} 

私のプロジェクトには列挙型がありますが、これらの列挙型変数と変数を比較します!調査の列挙体C#

どのように変数をこれらのアイテムと比較できますか?例えば

答えて

0

を私は私はあなたが求めているものを手に入れると思います。列挙型の値を繰り返し処理する方法を探しています。 enum値のint表現を返すEnum.GetValues()を使用してこれを行うことができます。

foreach (int i in Enum.GetValues(typeof(RoleType))) 
{ 
    //you can get the enum by casting the int to the enum type 
    RoleType rtEnum = (RoleType)i; 
} 
+0

タンクでたくさんの列挙型のforeachを取ることができるか分からない。私はこのコードを探していた! :-) –

+0

このコードがうまく機能していれば、それをあなたの質問に対する回答としてマークしてください。 – Atzoya

0

if(item == RoleType.Supervisor) 
{ 
} 
else if(item == RoleType.Administrator) 
{ 
} 
else 
{ 
} 
+0

このソリューションでは、列挙型の各項目を変数と比較する必要があります。列挙型の項目が多く、foreachやlambda式を使う方が良いとしましょう!しかし、私はどのように私はC# –

1

またはswitchステートメントを使用します。

 switch(item) 
     { 
      case RoleType.Supervisor: 
       break; 
      case RoleType.Administrator: 
       break; 
      case RoleType.User: 
       break; 
      case RoleType.UserPhone: 
       break; 
      case RoleType.Operator: 
       break; 
      default: 
       throw new ArgumentOutOfRangeException(); 
     } 
0

値(すなわち、ユーザが複数のロールであってもよい)相互に排他的ではない場合は、Flags属性の列挙を飾るおよびオペレータまたはHasFlag()方法を使用して、それに対してビット単位の操作を行うことができます。

[Flags] 
public enum RoleType 
{ 
    Supervisor = 1, 
    Administrator = 2, 
    User = 4, 
    UserPhone = 8, 
    Operator = 16 
} 

// assume there is a user class with a collection of roles which have role types 
var roles = (RoleType)user.Roles.Sum(o => o.RoleType); 
if(roles.HasFlag(RoleType.User)){ 
    // do something 
}