c# - 是否有更简洁的方法来检查变量是否是多个事物中的一个?

时间:2017-10-15 22:40:57

标签: c# if-statement var

所以目前我正在这样做:

if(variable == thing1 || variable == thing2 || variable == thing3)

但这不是超级可读的。我想做的是这样的事情:

if(variable == thing1 || thing2 || thing3)

c#中是否存在这样的语法?

6 个答案:

答案 0 :(得分:8)

如果简明的语法对您非常重要,您可以定义一个扩展方法:

begin

 guess <- 0
 guesses <- 0
 randnum <- new random number [1,1000]
 do
    guess <- ask user input
    guesses++
    if guess > randnum
        show "Too high"
    if guess < randnum
        show "Too low"
 while guess != randnum

 congrats  // guess = randnum
 show number of guesses

end

然后您可以像这样使用它:

public static class ObjectExtensions
{
    public static bool In<T>(this T item, params T[] elements)
    {
        return elements.Contains(item);
    }
}

也就是说,如果被检查的列表不会改变,我宁愿将其声明为静态只读字段,并对此调用if (variable.In(thing1, thing2, thing3)) 。上面的扩展方法可能会导致每次调用时都会分配一个新数组,这可能会影响紧密循环中的性能。

Contains

此外,如果要检查的列表包含多个项目,请改用private static readonly Thing[] _things = new [] { thing1, thing2, thing3 }; public void ProcessThing(Thing variable) { if (_things.Contains(variable)) { // ... } }

答案 1 :(得分:3)

将测试字符串放入列表或数组中并调用Contains。:

var testers = new [] { "foo1", "foo2" };

if (testers.Contains("subject"))
{
   // test succeeded
} 

作为替代方案:

if (new [] {"foo1", "foo2"}.Contains("subject"))
{
   // test succeeded
} 

答案 2 :(得分:2)

有些人更喜欢扩展方法:

public static bool IsOneOf<T>(this T self, params T[] values) => values.Contains(self);

或类似。

然后你可以说:

if (variable.IsOneOf(thing1, thing2, thing3))

糟糕,我看到道格拉斯是第一个采用这种方法的人。

它隐式使用T的默认相等比较器。

缺点是您为所有类型创建扩展方法。如果您只需要它,例如string,您当然可以创建一种不那么通用的扩展方法。

答案 3 :(得分:1)

你可以这样做:

int[] aux=new int[]{1,2,3}; 
if(Array.contains(aux, value))

答案 4 :(得分:1)

如果你将所有东西都放入某种集合中然后是,你可以使用LINQ和Any

https://msdn.microsoft.com/en-us/library/system.linq.enumerable.any(v=vs.110).aspx

答案 5 :(得分:0)

您有几个选择。

  1. 使用switch(如果thing1 - thing3是常量表达式)

    switch variable
        case thing1:
        case thing2:
        case thing3:
            DoSomething();
            break;
    
  2. 使用RegEx(仅适用于字符串)

    if (RegEx.Match(variable, "^(thing1|thing2|thing3)"))
    {
        DoSomething();
    }
    
  3. 使用数组

    string[] searchFor = new string[] {thing1, thing2, thing3};
    if (searchFor.Contains(variable))
    {
        DoSomething();
    }