linq max lazy evaluation
===

I'm having a bit of trouble understanding how lazy evaluation relates to the linq Max operator.

This is my code:

            var someList = new List<someType>
            {
                new someType { decimalValue = 32 }
            };

`line1:     var valA = someList.Any() ? someList.Max(s => s.decimalValue) : 0.0M;`

`line2:     var valB = someList.Any() ? someList.Max(s => s.decimalValue) : 0.0M;`

`line3:     var valC = valB;`

When stepping through the code I see the following behaviour:

After line 1 has executed, `valA = 0, valB = 0, valC = 0`

After line 2 has executed, `valA = 32, valB = 0, valC = 0`

After line 3 has executed, `valA = 32, valB = 32, valC = 32`

Why does `valA` only show a value after `valB` is assigned, and why does `valB` only show a value once `valC` is assigned?