关于 C# 中对修改 IEnumerable 中的数据却没有生效的问,时不时困扰着很多 C# 的初学者,尤其是学会了 Linq 并经常去使用的朋友, 时不时就会碰到在某个接收的参数为 IEnumerbale 的方法中明明做了某些操作,但是方法结束后, 原来的数据却完全没有变化的情况。
之所以说“时不时”, 是因为,在没有弄懂原因之前,这个问题似乎是“不可稳定重现”的,可能自己在工作中遇到了这个问题,可是等回家想要复盘一遍时却发现问题又不会出现了? 像是玄学一般。 为什么不在上班的时候去复现? 因为上班要完成工作啊, 这个问题虽说“玄”, 但解决的办法却不难, 要么把方法定义为更具体的类型,如 List, Array 等, 对数据进行 ToList() 操作 —— 而且在等会儿弄明白原因之后你会发现, 这个做法就是正确的。