c# - 如何判断扩展方法是否影响 'this'?

标签 c# .net extension-methods immutability

我知道 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/

相关文章:

c# - 模拟单元测试 - 获取实现接口(interface)的类的详细信息

c# - 如何在字典值上强制使用正则表达式模式(njsonschema)

mongodb - 允许记录类型 F# 为空

c# - 可以有私有(private)扩展方法吗?

c# - 无法将扩展方法添加到 C# 中的抽象类

c# - 超时已过且服务管理器中的操作尚未完成

c# - 如何将 'end of text' (ETX, ASCII 3) 放入字符串中?

C# - 获取不包括隐藏文件的文件列表

c# - 替换作为属性/公共(public)字段检索的对象列表中的元素

.net - Windows Azure 云 : End user requirements