c# - Why `.Reverse().TakeWhile(..)` seems to have an invalid index? -
please see code:
using system; using system.linq; public class test { public static void main() { var s = "5401"; console.writeline(s); var predicate = (d,i) => { var r = > 0 ? s[i-1] >= s[i] : true; console.write($"{i}: {s[i]}; "); if(i > 0) console.write($"{i-1}: {s[i-1]};"); console.writeline($" result: {r}"); return r; }; console.writeline(new string(s.takewhile(predicate).toarray())); // case: console.writeline(new string(s.reverse().takewhile(predicate).toarray())); } }
it outputs:
5401 0: 5; result: true 1: 4; 0: 5; result: true 2: 0; 1: 4; result: true 3: 1; 2: 0; result: false 540 0: 5; result: true 1: 4; 0: 5; result: true 2: 0; 1: 4; result: true 3: 1; 2: 0; result: false 104
why call reverse()
in second case not work?
enumerable.reverse
returns new reversed sequence , referring same string instance (s
) in both loops (which not affected reverse
call) . that's why don't see difference.
Comments
Post a Comment