请参阅此代码:
using System;
using System.Linq;
public class Test {
public static void Main() {
var s = "5401";
Console.WriteLine(s);
var predicate = (d,i) => {
var r = i > 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()));
// the case:
Console.WriteLine(new String(s.Reverse().TakeWhile(predicate).ToArray()));
}
}
输出:
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
为什么在第二种情况下调用Reverse()
不起作用?
答案 0 :(得分:5)
Enumerable.Reverse
返回一个新的反转序列,但是你在两个循环中都指的是相同的字符串实例(s
)(不受Reverse
调用的影响)。这就是为什么你没有看到任何区别。