检查变量是否在特殊的值列表中

use*_*438 46 c# variables contains

是否有更短的方式写这样的东西:

if(x==1 || x==2 || x==3) // do something
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是这样的:

if(x.in((1,2,3)) // do something
Run Code Online (Sandbox Code Playgroud)

Ily*_*nov 56

您可以使用List.Contains方法实现此目的:

if(new []{1, 2, 3}.Contains(x))
{
    //x is either 1 or 2 or 3
}
Run Code Online (Sandbox Code Playgroud)


Aus*_*nen 31

public static bool In<T>(this T x, params T[] set)
{
    return set.Contains(x);
}

...

if (x.In(1, 2, 3)) 
{ ... }
Run Code Online (Sandbox Code Playgroud)

必读: MSDN扩展方法

  • 甚至可以更新这个以使用`params`,这样你就可以获得类似`x.In(1,2,3)`EDIT:当然,那时候_could_写`x.In()`这有点像愚蠢.(另一方面,避免现有的`IEnumerable <T>`版本,你可以传入`x.In(null)`并抛出异常) (5认同)
  • 可能会更好,你听说过`params`吗? (2认同)
  • 虽然这绝对是*优雅*,但我个人*讨厌*适用于所有内容的扩展方法.+1虽然相同,但是:我喜欢优雅:) (2认同)

It'*_*ie. 11

如果它在IEnumerable<T>,请使用:

if (enumerable.Any(n => n == value)) //whatever
Run Code Online (Sandbox Code Playgroud)

另外,这是一个简短的扩展方法:

public static bool In<T>(this T value, params T[] input)
{
    return input.Any(n => object.Equals(n, value));
} 
Run Code Online (Sandbox Code Playgroud)

把它放在一个static class,你可以像这样使用它:

if (x.In(1,2,3)) //whatever
Run Code Online (Sandbox Code Playgroud)