更好的Enumerable.Range上升和下降范围?

use*_*923 3 .net c# linq

假设我有两个点,int x1, x2哪里x1可以更大,更小或相等x2.我想生成这两个点之间的所有整数(包括开头x1和结尾x2),或者只是x1两个点相等的值.是否有任何优雅的方式来生成IEnumerable<int>这些值?

Mar*_*age 9

您可以使用此迭代器块:

IEnumerable<int> CreateRange(int x1, int x2) {
  var increment = x2 > x1 ? 1 : -1;
  for (var i = x1; i != x2; i += increment)
    yield return i;
  yield return x2;
}
Run Code Online (Sandbox Code Playgroud)

它是高效的,创建一个范围就像使用一样干净Enumerable.Range:

CreateRange(10, 5).Select( ... )
Run Code Online (Sandbox Code Playgroud)