一次性返回所有可枚举的yield return;不循环

2024-04-13

我有以下函数来获取卡的验证错误。我的问题涉及处理 GetErrors。两种方法具有相同的返回类型IEnumerable<ErrorInfo>.

private static IEnumerable<ErrorInfo> GetErrors(Card card)
{
    var errors = GetMoreErrors(card);
    foreach (var e in errors)
        yield return e;
    
    // further yield returns for more validation errors
}

是否可以返回所有错误GetMoreErrors而不必枚举它们?


这是 F# 支持的东西yield!对于整个集合 vsyield对于单个项目。 (这对于尾递归来说非常有用......)

不幸的是,C# 不支持它。

但是,如果您有多个方法,每个方法都返回一个IEnumerable<ErrorInfo>, 您可以使用Enumerable.Concat使您的代码更简单:

private static IEnumerable<ErrorInfo> GetErrors(Card card)
{
    return GetMoreErrors(card).Concat(GetOtherErrors())
                              .Concat(GetValidationErrors())
                              .Concat(AnyMoreErrors())
                              .Concat(ICantBelieveHowManyErrorsYouHave());
}

不过,这两种实现之间有一个非常重要的区别:这一个将调用所有方法立即地,即使它一次只使用一个返回的迭代器。您现有的代码将等待,直到它循环遍历完中的所有内容GetMoreErrors()甚至在它之前asks关于接下来的错误。

通常这并不重要,但值得了解何时会发生什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一次性返回所有可枚举的yield return;不循环 的相关文章

  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo

随机推荐

  • 如何从新的 Lego Mindstorms Robot Inventor 上的自定义 Python 模块导入

    我一直在使用新的乐高 MINDSTORMS 机器人发明家 创建新的 项目 时 该项目似乎包含一个文件 然而 在每个示例代码文件的开头 我们可以看到 Mindstorm 模块已导入 如下所示 from mindstorms import MS
  • 从 Windows 10 bash shell 运行 Tomcat

    我在windows10 bash shell上安装了tomcat服务器 虽然它说 apache 正在运行 它没有在浏览器中打开管理面板 浏览器显示 无法到达连接 以前有人尝试过这个吗 请分享您的意见 谢谢 我假设您指的是 Windows 1
  • 我可以从闪存驱动器运行 Visual Studio 2010 吗?

    在我的工作中 我有一台装有 Windows 7 的新机器 我想保持我的开发技能 因此我想在该机器上加载我的 Visual Studio 2010 副本 但我没有管理员权限 我有一个 16 GB 闪存驱动器 是否可以将其加载到那里并从闪存驱动
  • 改变android中进度条的颜色

    我正在尝试更改水平进度条的颜色 但它没有改变 我做了一些谷歌搜索并浏览了您网站中给出的一些示例 但我没有成功地准确地改变颜色 我用了progressBar setProgressDrawable Drawable d 但它设置整个进度条视图
  • 想用jsp显示文件列表

    我是使用 glassfish 服务器的 netbeans 新手 我的 html 代码如下所示
  • 如何在 PHP 中包含一个类 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有文件index php 我想包含文件class twitter php在里面 我怎样才能做到这一点 希望当我将以下代码放入 index
  • TFS 构建服务器 - CSC:致命错误 CS2008:未指定输入

    当我们构建解决方案或错误引用的特定项目时 我们会在构建服务器上收到上述错误消息 我们可以使用 Visual Studio 也在构建服务器上 毫无问题地构建解决方案 但是在运行 msbuild 时会失败并出现上述错误 有任何想法吗 我找到了解
  • 在多个生命周期中运行 Maven 目标

    我有一个情况 我想在验证阶段和报告阶段运行 cobertura 插件 我有两个配置文件 它们都应该运行 cobertura 插件 但在配置文件 A 中 我只想创建 xml html 输出 但在配置文件 B 中 我将生成包含这些结果的完整站点
  • Selenium C# DefaultWait IgnoreExceptionTypes 不起作用

    我在等待 WebElement 可单击时使用 DefaultWait 尽管 TargetIncationException 是等待期间要忽略的异常列表中的异常之一 但在达到超时期限之前 我仍然有测试因该异常而失败 这不是我所期望的 publ
  • Linux下如何用C实现定时器的回调函数

    我已经在许多论坛上搜索了几天可能的解决方案 但没有运气 我在这里发布我的问题 非常感谢您的回复 主意 使用脚本控制灯光 Linux下C语言 应用场景 我有三盏灯 红 蓝 绿 脚本有控制它们的时间表 例如 从现在起10秒后 亮红灯2秒 从现在
  • 组合框 - 键入选择,然后单击焦点外 - 不会选择键入的项目

    我的组合框有问题 我有一个事件处理程序OnClick它根据选择的项目刷新数据 问题是当这种情况发生时 下拉组合框列出各种选项 在键盘上键入以查找匹配的项目 组合框更改此选择并调用OnClick event 由于此选择 事件 我的屏幕刷新 单
  • 如何使用reactJs根据背景颜色更改字体颜色

    我的容器有动态背景 它将由用户更改 因此我需要根据背景颜色设置文本颜色 例如 我设置容器的黑色背景 然后我需要为文本设置白色 我正在为我的应用程序使用 ReactJs 和材料 UI 库 请建议一些好的路径 请参阅下面的示例代码 import
  • 尝试加载方向变化的新视图

    我正在尝试在 Xcode 中创建一个应用程序 当手机从一个方向旋转到另一个方向时 该应用程序将切换到新视图 这是 switchviewcontroller h 文件代码 import
  • 下标变量

    有没有什么方法可以强制 Mathematica 独立于无下标变量来处理下标变量 进一步来说 比如说 我有以下定义 Subscript b 1 1 2 Subscript b 2 3 4 b Join Subscript b 1 Subscr
  • VS .Net:在安装程序项目中发布“来自 的主要输出”的构建事件

    我在项目中使用以下构建后操作 将库合并到我的应用程序中 IF ConfigurationName Debug GOTO end cp TargetPath TargetDir app unmerged exe del TargetPath
  • 将对象序列化为 XML

    我有一个继承的 C 类 我已经成功地 构建 了该对象 但我需要将对象序列化为 XML 有简单的方法吗 看起来该类已设置为序列化 但我不确定如何获取 XML 表示形式 我的类定义如下 System CodeDom Compiler Gener
  • ARC 是否保留无主引用的计数?

    ARC 是否保留对对象的无主引用的计数 那么 如果一个对象的强引用计数达到 0 并且该对象的无主引用计数 gt 0 则该对象将被取消初始化但不会被取消分配 只有当强引用计数和无主引用计数达到 0 时 它才会被释放 我在 Medium 上的一
  • GCC 错误:非命名空间范围中的显式专业化

    我正在尝试移植以下代码 我知道该标准不允许在非名称空间范围内显式专业化 我应该使用重载 但我只是找不到在这种特殊情况下应用此技术的方法 class VarData public template lt typename T gt bool
  • vs2008/vs2010 在 TextBox 中是否有插入符位置更改事件?

    我需要留意文本框内的插入符号位置 有这方面的活动吗 我不想为此使用计时器 例如 每 10 毫秒检查一次位置是否发生变化 我正在使用 Windows 窗体 本机 Windows 控件不会为此生成通知 尝试解决此限制会带来痛苦 您只是无法分辨插
  • 一次性返回所有可枚举的yield return;不循环

    我有以下函数来获取卡的验证错误 我的问题涉及处理 GetErrors 两种方法具有相同的返回类型IEnumerable