故意依赖 Linq Side Effects 是不好的做法吗?

2024-02-19

像这样的编程模式经常出现:

int staleCount = 0;

fileUpdatesGridView.DataSource = MultiMerger.TargetIds
    .Select(id =>
    {
        FileDatabaseMerger merger = MultiMerger.GetMerger(id);

        if (merger.TargetIsStale)
            staleCount++;

        return new
        {
            Id = id,
            IsStale = merger.TargetIsStale,
            // ...
        };
    })
    .ToList();

fileUpdatesGridView.DataBind();
fileUpdatesMergeButton.Enabled = staleCount > 0;

我不确定是否有更简洁的方法来编码?

即使是这样,这样做是不是不好的做法?


不,严格来说,这并不是“不好的做法”(例如使用用户输入的字符串连接来构造 SQL 查询或使用goto).

有时这样的代码比几个查询更具可读性/foreach或无副作用Aggregate称呼。至少尝试写也是个好主意foreach和无副作用版本,看看哪个版本更具可读性/更容易证明正确性。

请注意:

  • 通常很难推断此类代码会发生什么/何时发生。 IE。您围绕延迟执行 LINQ 查询这一事实进行了示例黑客攻击.ToList()调用,否则将不会计算该值。
  • 纯函数可以并行运行,一旦产生副作用就需要非常小心地这样做
  • 如果您需要将 LINQ-to-Object 转换为 LINQ-to-SQL,则必须重写此类查询
  • 通常,LINQ 查询倾向于没有副作用的函数式编程风格(因此按照惯例,读者不会期望代码中出现副作用)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

故意依赖 Linq Side Effects 是不好的做法吗? 的相关文章

随机推荐

  • 未找到 jmap 命令

    我正在尝试使用jmap对我的命令CentOS服务器 但它一直告诉我 即使我安装了 JDK 也找不到该命令 这是命令的输出java version java version 1 7 0 25 OpenJDK Runtime Environme
  • CGAL Visibility 计算错误的可见性多边形(简单多边形可见性算法)

    我必须计算给定多边形的某些顶点的可见性多边形 我正在使用 CGAL 可见性计算库 但是对于这个例子是多边形 https www ic unicamp br cid Problem instances Art Gallery AGPVG mi
  • MongoDB Java 客户端在“replaceOne”上将“_id”存储为 null

    我们已经升级 从 2 11 1 到
  • Visual Studio - 如何在发布模式下删除引用

    我正在开发一个用于其他应用程序的库 并且由于 NLog 该库具有大量调试和日志记录语句 当我切换到发布模式时是否可以排除对 NLog dll 的引用 Cheers 您可以手动编辑 csproj 文件 并执行如下操作
  • Cassandra 错误 - 无法限制聚类列(前一列受非 EQ 关系限制)

    我们使用 Cassandra 作为车队管理解决方案的数据历史记录 我们在 Cassandra 中有一张表 用于存储车辆行程的详细信息 表结构如下 CREATE TABLE journeydetails bucketid text vehic
  • 使用 Javascript 隐藏 iPhone 的键盘

    有谁知道如何hide用户触摸按钮 开始 而不是 完成 后 iPhone 在 Safari 中的键盘 我需要 Javascript 和 HTML5 的解决方案 使用 jQuery 您应该取消单击按钮的输入焦点 button id clicke
  • Python 3.9 和 3.10 之间 level=0 的 zlib 大小差异

    在这段代码中 使用 zlib 对一些数据进行编码 但 level 0 因此它实际上并未被压缩 import zlib print zlib ZLIB VERSION zlib ZLIB VERSION total 0 print Total
  • 使用 Mockito 模拟具有泛型参数的类

    是否有一种干净的方法来模拟带有泛型参数的类 假设我必须模拟一堂课Foo
  • 如何在 TypeScript 中删除数组项?

    我有一个在 TypeScript 中创建的数组 它有一个用作键的属性 如果我有该密钥 我如何从中删除项目 与 JavaScript 中的方式相同 delete myArray key 请注意 这将元素设置为undefined 更好地使用Ar
  • 如何正确使用drawMyLocation

    我试图用 android 中的默认蓝点向用户显示当前位置 在我的地图页面中 我还有一个显示不同兴趣点的布局 我无法弄清楚要为某些变量添加什么 并且想知道是否有人可以帮助我 这就是我到目前为止用来显示我的位置的方法 Location loca
  • 从完成处理程序返回值 - Swift

    我在实用程序类中使用 loadImage 方法 并且在通过闭包返回图像时遇到一些问题 基本上因为我的代码可能返回图像或错误 所以在调用方法时将其分配给图像属性将不起作用 我在类的方法声明中使用的方法是否错误 或者我应该以不同的方式调用该方法
  • 我的 ffmpeg 输出总是在最后添加额外的 30 秒静音

    这是我用来将 1 个音频和 1 个图像合并为 1 个视频的代码 参数 由于某种原因 无论来源如何 它都会在输出视频的末尾添加 30 秒的静音 我在 Win10 x64 上运行它 安装了最新的 ffmpeg 我检查了代码 但无法确定它在哪里造
  • 自动在句点和逗号后添加空格,同时避免数字

    这是当前的正则表达式 当人们写下以下内容时 我用它来清理句子 你好 我是安德烈斯 对吗 它将自动转换为 你好 我是安德烈斯 对吧 当字符串中有数字时就会出现问题 例子 我有 40 381 32 美元 将转换为 我有 40 381 32 美元
  • 无法找到资源

    我不确切知道这是否是一个错误 但我一直收到运行时 IOException 错误 指出无法找到资源 我正在画布背景中的应用程序 c WPF 中加载一些图像 具体取决于数据库状态 问题是 我无法加载最后一个 按字母顺序排序 文件 例如 我的文件
  • iOS - 缩放和裁剪 CMSampleBufferRef/CVImageBufferRef

    我正在使用 AVFoundation 并从中获取示例缓冲区AVCaptureVideoDataOutput 我可以使用以下方法将其直接写入 videoWriter void writeBufferFrame CMSampleBufferRe
  • Java:获取打印机状态(缺纸/缺纸)

    我是这样打印的 FileWriter imp new FileWriter COM2 while linea br readLine null imp write linea imp write 0x0A 现在我使用端口 COM2 我有一台
  • Unidata 数据库导出 - 如何使用 TO DELIM 添加标题

    在 Unidata 中 将查询转储到分隔文件时 例如 列出 MYFILE 1000 ATB1 ATB2 ATB3 至 DELIM tmp extract txt 是否有任何 UDT OPTIONS 控制是否写入标题行 当前唯一的解决方法涉及
  • 从子线程停止主线程

    我正在编写一个python程序 在主函数中我正在启动一个连续运行的线程 启动线程后 主函数进入 while 循环 连续获取用户输入 如果子线程中出现异常 我也想结束主函数 最好的方法是什么 提前致谢 让线程 控制 其父级并不是一个好的做法
  • 排除日期晚于今天的项目

    我有一个关于 XSLT 的问题 在一个网站上 我有一个简单的日历 显示未来将要发生的事件 但当一个事件完成后 它应该从我的列表中删除 我所说的 完成 是指活动的日期已经过了今天 每个事件都附有日期 看下面的代码
  • 故意依赖 Linq Side Effects 是不好的做法吗?

    像这样的编程模式经常出现 int staleCount 0 fileUpdatesGridView DataSource MultiMerger TargetIds Select id gt FileDatabaseMerger merge