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

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -