将variables与多个值进行比较

经常在我的代码中,我需要比较一个variables的几个值:

if ( type == BillType.Bill || type == BillType.Payment || type == BillType.Receipt ) { // Do stuff } 

我一直在想我可以这样做:

 if ( type in ( BillType.Bill, BillType.Payment, BillType.Receipt ) ) { // Do stuff } 

但是,这当然是SQL允许这一点。

在C#中有一个更整洁的方法吗?

你可以用.Contains这样做:

 if(new[]{BillType.Receipt,BillType.Bill,BillType.Payment}.Contains(type)){} 

或者,创build自己的扩展方法,使用更易读的语法

 public static class MyExtensions { public static bool IsIn<T>(this T @this, params T[] possibles) { return possibles.Contains(@this); } } 

然后通过以下方式调用

 if(type.IsIn(BillType.Receipt,BillType.Bill,BillType.Payment)){} 

还有switch语句

 switch(type) { case BillType.Bill: case BillType.Payment: case BillType.Receipt: // Do stuff break; } 

假设type是一个枚举,你可以使用FlagsAttribute :

 [Flags] enum BillType { None = 0, Bill = 2, Payment = 4, Receipt = 8 } if ((type & (BillType.Bill | BillType.Payment | BillType.Receipt)) != 0) { //do stuff } 

尝试使用开关

  switch (type) { case BillType.Bill: case BillType.Payment: break; } 

尝试使用C#HashSet的值列表。 如果您需要将许多值与单个值集进行比较,这可能特别有用。

尝试检查策略devise模式(又称策略devise模式)。

 public interface IBillTypePolicy { public BillType { get; } void HandleBillType(); } public class BillPolicy : IBillTypePolicy { public BillType BillType { get { return BillType.Bill; } } public void HandleBillType() { // your code here... } } 

这里有一篇关于如何dynamic解决 Los Techies 政策的文章 。

如何获得所有枚举值的数组,并迭代通过这个?

http://maniish.wordpress.com/2007/09/27/iterate-through-enumeration-c/