我知道 String 扩展方法返回一个 String 并且实际上不会影响调用扩展方法的变量(因此它是不可变的)——但我如何判断其他扩展方法是否会影响?例如,我正在使用 List<NewsItem>
- 我需要按日期降序排列这个列表,所以我写了这段代码:
newsItems.OrderByDescending(o => o.Date);
这会影响 newsItems 列表还是只是返回 IOrderedEnumerable?
换句话说,上面的代码实际上应该是:
newsItems = newsItems.OrderByDescending(o => o.Date).ToList();
??
谢谢,
丹
最佳答案
OrderByDescending
是 IEnumerable<T>
上的扩展方法,它本身提供只读 访问权限。当然,扩展方法可以转换到List<T>
。 ,但基本上没有 LINQ to Objects 扩展方法会影响它们的目标(当然,假设目标不受迭代影响)。
LINQ 采用函数式风格设计 - 方法返回数据的新 View ,而不是更改调用它们的目标。
编辑:正如 drew 所指出的,[Pure]
attribute 可以用作指示,一些工具会使用它。然而:
- 您仍然需要相信
[Pure]
属性已正确应用 - 判断是否
[Pure]
并不总是那么容易属性(例如,它没有出现在我链接到的文档中) - 如果您对它的作用没有信心,您可能应该阅读任何您调用的文档
关于c# - 如何判断扩展方法是否影响 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8940304/