我的代码中经常需要将变量与几个值进行比较:
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#中有更整洁的方式吗?
答案 0 :(得分:74)
你可以用.Contains这样做:
if(new[]{BillType.Receipt,BillType.Bill,BillType.Payment}.Contains(type)){}
或者,使用更易读的语法创建自己的扩展方法
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)){}
答案 1 :(得分:10)
还有switch语句
switch(type) {
case BillType.Bill:
case BillType.Payment:
case BillType.Receipt:
// Do stuff
break;
}
答案 2 :(得分:7)
假设type是枚举,您可以使用FlagsAttribute:
[Flags]
enum BillType
{
None = 0,
Bill = 2,
Payment = 4,
Receipt = 8
}
if ((type & (BillType.Bill | BillType.Payment | BillType.Receipt)) != 0)
{
//do stuff
}
答案 3 :(得分:3)
尝试使用开关
switch (type)
{
case BillType.Bill:
case BillType.Payment:
break;
}
答案 4 :(得分:0)
尝试使用C#HashSet获取值列表。如果您需要将多个值与单个值集进行比较,这将非常有用。
答案 5 :(得分:0)
尝试查看策略设计模式(a.k.a.策略设计模式)。
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...
}
}
这是Los Techies的great post on how to dynamically resolve the policy。
答案 6 :(得分:0)
如何获取所有Enums值的数组并迭代这个?
http://maniish.wordpress.com/2007/09/27/iterate-through-enumeration-c/