if语句匹配多个值

Ric*_*cky 71 c# if-statement

写这个if语句的任何更简单的方法?

if (value==1 || value==2)

例如......在SQL中你可以说where value in (1,2)而不是where value=1 or value=2.

我正在寻找适用于任何基本类型的东西...... string,int等.

Amr*_*mry 129

怎么样:

if (new[] {1, 2}.Contains(value))
Run Code Online (Sandbox Code Playgroud)

虽然这是一个黑客:)

或者,如果您不介意创建自己的扩展方法,则可以创建以下内容:

public static bool In<T>(this T obj, params T[] args)
{
    return args.Contains(obj);
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

if (1.In(1, 2))
Run Code Online (Sandbox Code Playgroud)

:)

  • 我不认为第一个建议真的是一个hack,对我来说似乎相当优雅,特别是如果它是大多数人通过`IsOneOfACertainType(typeToCheck)调用的背景中的代码;`例如 (9认同)
  • 不要忘记使用`using System.Linq;`来使用`Contains`. (6认同)
  • *真的*看起来像Python! (2认同)

Pao*_*sco 36

一种更复杂的方式:)模拟SQL的'IN':

public static class Ext {    
    public static bool In<T>(this T t,params T[] values){
        foreach (T value in values) {
            if (t.Equals(value)) {
                return true;
            }
        }
        return false;
    }
}

if (value.In(1,2)) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是采用标准方式,它更具可读性.

编辑:根据@Kobi的建议,一个更好的解决方案:

public static class Ext {    
    public static bool In<T>(this T t,params T[] values){
        return values.Contains(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 难道你没有写过`return values.Contains(t)`?或者`返回值.任何(v => t.Equals(v))`? (7认同)

Hom*_*mam 25

这是你想要的 ?

if (new int[] { 1, 2, 3, 4, 5 }.Contains(value))
Run Code Online (Sandbox Code Playgroud)


Nik*_*Nik 6

如果你有一个List,你可以使用.Contains(yourObject),如果你只是在寻找它(就像在哪里).否则请查看Linq .Any()扩展方法.


jul*_*les 6

或者,如果将来测试1或2以外的值,这将为您提供更大的灵活性,即使用switch语句

switch(value)
{
case 1:
case 2:
   return true;
default:
   return false
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 6

C# 9 直接支持:

if (value is 1 or 2)
Run Code Online (Sandbox Code Playgroud)

然而,在许多情况下:switch可能更清晰(尤其是在最近的switch语法增强中)。你可以在这里看到这一点if (value is 1 or 2)编译与if (value == 1 || value == 2).


Joe*_*eau 5

使用Linq,

if(new int[] {1, 2}.Contains(value))

但我必须认为你原来的if更快.


det*_*ale 5

如果在长列表中多次搜索固定值列表中的值,则应使用HashSet <T>.如果列表非常短(<~20个项目),则基于此测试HashSet与List性能,List可以具有更好的 性能

HashSet<int> nums = new HashSet<int> { 1, 2, 3, 4, 5 };
// ....
if (nums.Contains(value))
Run Code Online (Sandbox Code Playgroud)