I have this code which just simply sorts IEnumerable of integers based on digit number in each of the integer.
var ints = new List<int>() { 66, 7, 9, -5, -22, 67, 122, -333, 555, -2 };
var ordered = ints.OrderBy(x =>
{
x = Math.Abs(x);
Console.WriteLine($"Getting length of {x}");
int len = 0;
while (x >= 1)
{
len++;
x /= 10;
}
return len;
});
Console.WriteLine("After OrderBy");
Console.WriteLine("Fetching first item in ordered sequence");
Console.WriteLine($"First item is {ordered.First()}");
Console.WriteLine(string.Join(" ", ordered));
So, when the program hits line with fetching first item in ordered sequence in that moment the IEnumerable is getting sorted(I'm receiving output lines Getting lenght of XXX) because OrderBy was deferred and that't quite clear.
But why when program hits Console.WriteLine(string.Join(" ", ordered)); I'm again getting this output? Is IEnumerable sorted again? (isn't it already sorted?)