什么时候应该在ac#if语句中使用contains方法而不是逻辑运算符?

gir*_*ake 0 c# if-statement contains logical-operators

我的同事说array.contains()if在评估枚举时,我应该在声明中使用。

示例a:

if (new[] { enumvalue.a, enumvalue.b, enumvalue.c }.Contains(x.some_enum_value))
{
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

...与示例b相比

if (x.some_enum_value == enumvalue.a || x.some_enum_value == enumvalue.b || x.some_enum_value == enumvalue.c) 
{
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用示例a而不是示例b?

AAA*_*ddd 5

建议使用两全其美的枚举约束C#7.3

public static bool IsIn<TEnum>(this TEnum source, params TEnum[] list)
   where TEnum : Enum 
   => list.Contains(source);
Run Code Online (Sandbox Code Playgroud)

或者如果你愿意

public static bool IsIn<T>(this T source, params T[] list)
   => list.Contains(source);
Run Code Online (Sandbox Code Playgroud)

用法

var someEnum = MyEnum.Three;

if (someEnum.IsIn(MyEnum.One, MyEnum.Three))
{
   Console.WriteLine();
}

var list = new[]
              {
                 MyEnum.Three,
                 MyEnum.One
              };

if (someEnum.IsIn(list))
{
   Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

注意:总而言之,您应该做最喜欢,最可维护的事情以及老板喜欢的事情。其他一切都是主观的

注2:唯一的好处是扩展方法的使用,并且可以使用params关键字获取参数列表。否则,这没有太大价值