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?
建议使用两全其美的枚举约束在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关键字获取参数列表。否则,这没有太大价值