我有一个循环,最多循环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/

10-11 22:45
查看更多