Thoughts on foreach with Enumerable.Range vs traditional for loop

前端 未结 18 1107
花落未央
花落未央 2021-01-30 06:13

In C# 3.0, I\'m liking this style:

// Write the numbers 1 thru 7
foreach (int index in Enumerable.Range( 1, 7 ))
{
    Console.WriteLine(index);
}
18条回答
  •  终归单人心
    2021-01-30 06:54

    How to use a new syntax today

    Because of this question I tried out some things to come up with a nice syntax without waiting for first-class language support. Here's what I have:

    using static Enumerizer;
    
    // prints: 0 1 2 3 4 5 6 7 8 9
    foreach (int i in 0 <= i < 10)
        Console.Write(i + " ");
    

    Not the difference between <= and <.

    I also created a proof of concept repository on GitHub with even more functionality (reversed iteration, custom step size).

    A minimal and very limited implementation of the above loop would look something like like this:

    public readonly struct Enumerizer
    {
        public static readonly Enumerizer i = default;
    
        public Enumerizer(int start) =>
            Start = start;
    
        public readonly int Start;
    
        public static Enumerizer operator <(int start, Enumerizer _) =>
            new Enumerizer(start);
    
        public static Enumerizer operator >(int _, Enumerizer __) =>
            throw new NotImplementedException();
    
        public static IEnumerable operator <=(Enumerizer start, int end)
        {
            for (int i = start.Start; i < end; i++)
                yield return i;
        }
    
        public static IEnumerable operator >=(Enumerizer _, int __) =>
            throw new NotImplementedException();
    }
    

提交回复
热议问题