我有一个循环,最多循环20个。
我正在使用C#4.0和LINQ(在需要时)。有什么好说的"if i > 3 && < 5"
但是对于不同的波段(例如3和5、6和8等),循环中是否没有if语句的负载?
谢谢
最佳答案
如果只想简化语法,则可以编写扩展方法:
public static bool IsBetween(this int num, int exclusiveLowerBound, int exclusiveUpperBound)
{
return num > exclusiveLowerBound && num < exclusiveUpperBound;
}
当然,如果
i.IsBetween(3, 5)
确实比您提供的样本更干净,则值得商bat。如果确实要处理“各种频带”,则可以使用有效的Interval Tree数据结构。如果性能不是问题,则可以自己编写一个简单的类:
public class NumRange
{
public int ExclusiveLowerBound { get; private set; }
public int ExclusiveUpperBound { get; private set; }
public int Size
{
get
{
return ExclusiveUpperBound - ExclusiveLowerBound;
}
}
public NumRange(int boundary1, int boundary2)
{
ExclusiveLowerBound = Math.Min(boundary1, boundary2);
ExclusiveUpperBound = Math.Max(boundary1, boundary2);
}
public bool Contains(int num)
{
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);
}
关于c# - 检查循环增量是否在一定范围内的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3487292/