C# 检查循环中增量是否在特定范围内的最佳方法?
我有一个循环,最多循环20次 我在必要时使用C4.0和LINQ。什么是好的表达方式 如果i>3&<5 但是对于不同的频带,例如3到5、6和8等,循环中没有if语句的负载 谢谢您可以使用开关:C# 检查循环中增量是否在特定范围内的最佳方法?,c#,C#,我有一个循环,最多循环20次 我在必要时使用C4.0和LINQ。什么是好的表达方式 如果i>3&
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?后者。很抱歉不够清晰。除了这些特定于乐队的动作外,循环还有什么其他作用吗?听起来你好像陷入了反模式的困境。