要传递给迭代器的值类型的可变包装器

2024-05-27

我正在编写一个需要传递可变整数的迭代器。

public IEnumerable<T> Foo(ref int valueThatMeansSomething)
{
    // Stuff

    yield return ...;
}

这让我“错误 476 迭代器不能有 ref 或 out 参数”。

我需要的是要在迭代器中修改该整数值并可供迭代器的调用者使用。换句话说,无论叫什么Foo()上面想知道的最终值valueThatMeansSomething and Foo()可以自己使用。实际上,我想要一个引用类型而不是值类型的整数。

我唯一能想到的就是编写一个类来封装我的整数并允许我修改它。

public class ValueWrapper<T>
    where T : struct
{
    public ValueWrapper(T item)
    {
        this.Item = item;
    }

    public T Item { get; set; }
}

So:

ValueWrapper<int> w = new ValueWrapper<int>(0);
foreach(T item in Foo(w))
{
    // Do stuff
}

if (w.Item < 0) { /* Do stuff */ }

BCL 中是否已有任何类或机制可以处理此问题?有任何缺陷ValueWrapper<T>上面提出的?

(我的实际使用比上面的示例更复杂,因此处理我的内部变量foreach循环调用Foo()不是一个选择。时期。)


如果您只需要写入值,那么另一种技术是:

public IEnumerable<whatever> Foo(Action<int> setter) { ... }

int value = 0;
foreach(var x in Foo(x => {value=x;}) { ... }

巧合的是,我将在 7 月份的博客中撰写一系列关于迭代器块有如此多愚蠢限制的原因的文章。 “为什么没有参考参数?”将在该系列的早期。

http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx http://blogs.msdn.com/ericlippert/archive/tags/Iterators/default.aspx

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

要传递给迭代器的值类型的可变包装器 的相关文章

随机推荐

  • 将 n 个可变高度图像拟合为 3 个(相似长度)列布局

    我正在寻找类似于的 3 列布局piccsy com http piccsy com 给定许多宽度相同但高度不同的图像 有什么算法可以对它们进行排序以使列长度的差异最小 最好使用 Python 或 JavaScript 非常感谢您提前的帮助
  • Angular 2:如何从组件控制

    这个问题在这里已经有答案了 我尝试使用 Angular 2 但停止处理 HTML 5 视频 在手册中我发现 可以在模板中使用
  • rxJava buffer() 与尊重背压的时间

    的版本buffer根据 JavaDoc 不按时间执行背压的运算符 http reactivex io RxJava 2 x javadoc io reactivex Flowable html buffer int http reactiv
  • 使用列时如何选择多索引中的第二级?

    我有一个带有此索引的数据框 index pd MultiIndex from product stock1 stock2 price volume 这是一个有用的结构 能够做到df stock1 但是如何选择所有价格数据呢 我无法理解文档的
  • 如何从表列javafx中删除行

    这些是我的表格列 Course and 描述 如果单击一行 该行变为 活动 突出显示 并且他们按下Delete按钮它应该删除该行 我该怎么做 我的代码Course列 以及我要添加什么事件侦听器到我的delete按钮 SuppressWarn
  • PHP 生成的 XML 显示无效的 Char 值 27 消息

    我使用 PHP 库生成 XML 如下所示 dom new DOMDocument 1 0 utf 8 执行上述操作会生成一个页面 该页面在输出顶部显示一条消息 此页面包含以下错误 第 16 行第 274505 列错误 PCDATA 无效 C
  • 是否存在可以保证哈希算法唯一的情况?

    如果我使用字节大小大于数据 例如 sha 256 的哈希算法对大小受限的类似数据 例如社会安全号码 进行哈希处理 哈希是否能保证与数据具有相同级别的唯一性 原始数据 哈希冲突的概率与输入字符串的大小无关 除非它指示需要多少个输入来保持唯一性
  • 超大图像缩小后变得模糊

    这是我第一次尝试响应式设计 所以如果这是一个愚蠢的简单问题 请原谅 我创建了一个图像并将其最大宽度设置为不大于图像的实际宽度 因为我知道放大图像会导致模糊不清 我有点困惑的是 当我缩小窗口并且图像开始缩小时 它也变得模糊 这是正确的行为吗
  • 使用 Coldfusion 分页

    是否可以仅使用一个查询在 Coldfusion 中分页并显示页数 我的理解是 您显然可以使用一个查询进行分页 但您需要一个额外的查询来创建页面 这是为了计算结果总数 currentPage 1 resultsPerPage Offset i
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • WSDL 中的数组响应 - SOAP PHP

    在我的 wsdl 代码中 我得到一个整数 我想返回数组中的结果 为什么在我的输入中我只有一个整数 而我需要数组中的结果 因为在我的 php 函数中 我想从客户端选择的整数中的数据库返回信息 例如 我的客户发送1 在我的php中 我从数据库中
  • 如何在 Spring 3 中以编程方式执行注销

    我有一个用于注销的 spring 配置 如下所示
  • 如何在应用程序打开或关闭的情况下在后台的特定日期时间快速运行任务

    我正在开发闹钟应用程序 我需要在特定时间安排闹钟 我使用scheduleLocalNotification用于安排警报 它工作正常 如我所愿 BUT在触发警报之前 我需要向 API 服务器发出请求 在该请求中 我想检查从 API 服务器返回
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • MEF 或 MEF2 是否已融入 .NET Framework 中?

    我正在尝试了解 MEF 并且看到对 MEF 和 MEF 2 的引用 This site http www palmmedia de blog 2011 8 30 ioc container benchmark performance com
  • TypeScript 与 React Lazy 出现 Promise 错误

    我正在使用带有打字稿的反应 我使用了更高阶的组件来检查用户是否经过身份验证 添加临时后 我在路线中收到错误 如下所示 home nidhin Documents Nidhinbackup F iot remsys demotwo remsy
  • -fno-omit-frame-pointer 与 clang 等效的编译器选项

    我想用DS 5 Streamline profiler来分析我的代码 在文档中提到 为了能够查看调用堆栈 我们需要使用编译器选项来编译代码 fno omit frame pointer gcc 中有这个选项 clang 也有等效的选项吗 f
  • 在 Java 中有效地对图像进行颜色循环

    我正在编写一个曼德尔布罗分形查看器 我想以智能的方式实现颜色循环 给定一个图像 我想修改它的 IndexColorModel 据我所知 没有办法修改 IndexColorModel 也没有办法为图像提供新的 IndexColorModel
  • 在 Python 3.x 中,让 print 像在 Python 2 中一样工作(as 语句)

    我想知道 print 函数是否可以像 Python 2 及更早版本中那样工作 无需更改整个语法 所以我有这样的声明 print Hello World 我喜欢在 Python 3 中使用该语法 我尝试导入该库six 但这并没有解决问题 仍然
  • 要传递给迭代器的值类型的可变包装器

    我正在编写一个需要传递可变整数的迭代器 public IEnumerable