Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查循环中增量是否在特定范围内的最佳方法?_C# - Fatal编程技术网

C# 检查循环中增量是否在特定范围内的最佳方法?

C# 检查循环中增量是否在特定范围内的最佳方法?,c#,C#,我有一个循环,最多循环20次 我在必要时使用C4.0和LINQ。什么是好的表达方式 如果i>3&

我有一个循环,最多循环20次

我在必要时使用C4.0和LINQ。什么是好的表达方式

如果i>3&<5

但是对于不同的频带,例如3到5、6和8等,循环中没有if语句的负载

谢谢

您可以使用开关:

switch(i) {
  case 3:
  case 4:
  case 5:
    // between 3 and 5
    break;
  case 6:
  case 7:
  case 8;
    // between 6 and 8
    break;
  case 9:
  case 10:
  case 11:
    // between 9 and 11
    break;
}
您可以使用开关:

switch(i) {
  case 3:
  case 4:
  case 5:
    // between 3 and 5
    break;
  case 6:
  case 7:
  case 8;
    // between 6 and 8
    break;
  case 9:
  case 10:
  case 11:
    // between 9 and 11
    break;
}

您仍然需要检查这些值,因此我认为最好的选择是将检查作为一个函数。这使得if子句非常干净,但仍然提供了对任何范围进行测试的灵活性

bool inBand(int value, int low, int high) {
  return value > low && value < high;
}

您仍然需要检查这些值,因此我认为最好的选择是将检查作为一个函数。这使得if子句非常干净,但仍然提供了对任何范围进行测试的灵活性

bool inBand(int value, int low, int high) {
  return value > low && value < high;
}

为了隐藏一些神奇的数字,也许可以让代码更清晰一些,你可以这样做。这一切都取决于你的需要

//By naming the rangeX variables something meaningful you can make your code more readable(in my mind).
var range1 = new int[] { 1, 2, 3 };
var range2 = new int[] { 4, 5 };
var range3 = new int[] { 6 };

for(int i = 0; i < 20; i++)
{
    if(range1.Contains(i)) 
    {
      //Do stuff
    }
    else if(range2.Contains(i)) 
    {
      //Do other stuff
    }
    //etc
}

为了隐藏一些神奇的数字,也许可以让代码更清晰一些,你可以这样做。这一切都取决于你的需要

//By naming the rangeX variables something meaningful you can make your code more readable(in my mind).
var range1 = new int[] { 1, 2, 3 };
var range2 = new int[] { 4, 5 };
var range3 = new int[] { 6 };

for(int i = 0; i < 20; i++)
{
    if(range1.Contains(i)) 
    {
      //Do stuff
    }
    else if(range2.Contains(i)) 
    {
      //Do other stuff
    }
    //etc
}

如果您只想简化语法,可以编写一个扩展方法:

public static bool IsBetween(this int num, int exclusiveLowerBound, int exclusiveUpperBound)
{
    return num > exclusiveLowerBound && num < exclusiveUpperBound;
}
这将允许您编写如下代码:

var rangeToComment = new Dictionary<NumRange, string>
{
    {new NumRange(3,5), "The number 4."},
    {new NumRange(0, 10),"Single digit natural numbers"},
    {new NumRange(int.MinValue,int.MaxValue),"Integers"}
};

foreach (int number in Enumerable.Range(0, 100))
{
    var tightestRange = rangeToComment.Where(kvp => kvp.Key.Contains(number))
                                      .OrderBy(kvp => kvp.Key.Size)
                                      .First();
    Console.WriteLine("{0}: {1}", number, tightestRange.Value);
}

如果您只想简化语法,可以编写一个扩展方法:

public static bool IsBetween(this int num, int exclusiveLowerBound, int exclusiveUpperBound)
{
    return num > exclusiveLowerBound && num < exclusiveUpperBound;
}
这将允许您编写如下代码:

var rangeToComment = new Dictionary<NumRange, string>
{
    {new NumRange(3,5), "The number 4."},
    {new NumRange(0, 10),"Single digit natural numbers"},
    {new NumRange(int.MinValue,int.MaxValue),"Integers"}
};

foreach (int number in Enumerable.Range(0, 100))
{
    var tightestRange = rangeToComment.Where(kvp => kvp.Key.Contains(number))
                                      .OrderBy(kvp => kvp.Key.Size)
                                      .First();
    Console.WriteLine("{0}: {1}", number, tightestRange.Value);
}

您是要一张支票,还是要多张支票?也就是说,你是说它是否在范围2-3或范围5-7或范围4-5 do X,还是说它是否在范围2-3 do X,如果在范围5-7 do Y,如果在范围4-5 do Z?后者。很抱歉不够清晰。除了这些特定于乐队的动作外,循环还有什么其他作用吗?听起来你好像陷入了反模式的困境。你是要一个检查,还是要多个检查?也就是说,你是说它是否在范围2-3或范围5-7或范围4-5 do X,还是说它是否在范围2-3 do X,如果在范围5-7 do Y,如果在范围4-5 do Z?后者。很抱歉不够清晰。除了这些特定于乐队的动作外,循环还有什么其他作用吗?听起来你好像陷入了反模式的困境。