使if语句更简单

Sco*_*lby 2 .net c#

只是一个基本的if陈述,试图让它更简单,更容易阅读.现在它的内容如下:

  if ( myid == 1 || myid ==2 || myid == 10 || myid == 11 || myid == 12 || myid == 13 || myid ==14 || myid ==15)
  {
    ...
  }
Run Code Online (Sandbox Code Playgroud)

int[] ints = [1,2,10,11,12,13,14,15]那时我正在想类似的东西

  if (ints.Contains(myid))
  {
  }
Run Code Online (Sandbox Code Playgroud)

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

Ily*_*nov 5

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

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

这将允许你写:

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

考虑更好在扩展方法之间,这只是一个简单的例子.现在你可以:

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

}
Run Code Online (Sandbox Code Playgroud)

或使用本机方法

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

}
Run Code Online (Sandbox Code Playgroud)

要么

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

}
Run Code Online (Sandbox Code Playgroud)