make if语句简化

时间:2014-07-02 01:56:59

标签: c# .net

只是一个基本的if语句,试图让它更简单易读。现在它写着:

  if ( myid == 1 || myid ==2 || myid == 10 || myid == 11 || myid == 12 || myid == 13 || myid ==14 || myid ==15)
  {
    ...
  }

我在想int[] ints = [1,2,10,11,12,13,14,15],然后是

  if (ints.Contains(myid))
  {
  }

我实际上并不知道这是否更容易阅读,它肯定更短,两者的性能差异可能微不足道。

1 个答案:

答案 0 :(得分:5)

问题基于意见,但如果可读性是关键因素,一种选择是使用扩展方法

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

允许你写:

if (myid.In(1, 2, 10, 11, 12, 13, 14, 15))
{

}

我会填写其他选项,只是为了给出一些比较感(我当然不会提倡所有下一个选项)

丑陋,但对于一个“连续”序列工作正常:

if ((myid >= 1 && myid <= 2) || (myid >= 10 && myid <= 15))
{

}

您可以定义自己的Between扩展方法。注意:我总是会忘记minVal或maxVal是包含还是排他。 (例如Random.Next使用minValue包含和maxValue独占):

public static bool Between(this int number, int minVal, int maxVal)
{
    return number >= minVal && number <= maxVal;
}

考虑很多better Between扩展方法,这只是一个简单的例子。现在你可以:

if (myid.Between(1, 2) || myid.Between(10, 15))
{

}

或使用原生方法

if (new[]{1, 2, 10, 11, 12, 13, 14, 15}.Contains(myid))
{

}

或者

int[] expectedValues = {1, 2, 10, 11, 12, 13, 14, 15};
if (expectedValues.Contains(myid))
{

}