将变量与多个值进行比较

Mon*_*ong 45 c#

在我的代码中,我经常需要将变量与几个值进行比较:

if ( type == BillType.Bill || type == BillType.Payment || type == BillType.Receipt )
{
  // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

我一直在想我能做到:

if ( type in ( BillType.Bill, BillType.Payment, BillType.Receipt ) )
{
   // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

但当然那是允许这种情况的SQL.

C#中有更整洁的方式吗?

Mar*_*ark 75

你可以用.Contains这样做:

if(new[]{BillType.Receipt,BillType.Bill,BillType.Payment}.Contains(type)){}
Run Code Online (Sandbox Code Playgroud)

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

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

然后叫它:

if(type.IsIn(BillType.Receipt,BillType.Bill,BillType.Payment)){}
Run Code Online (Sandbox Code Playgroud)


was*_*atz 10

还有switch语句

switch(type) {
    case BillType.Bill:
    case BillType.Payment:
    case BillType.Receipt:
        // Do stuff
        break;
}
Run Code Online (Sandbox Code Playgroud)


Yur*_*ich 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
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议为FlagsAttribute保留好标记.使用`[Flags]`来装饰BillType对我说任何BillTypes的组合都可以应用于该值,但实际上并非如此. (6认同)