【发布时间】:2011-10-16 12:52:03
【问题描述】:
我对 C#(来自 PHP)有点新,我有点震惊,通过循环遍历列表我无法传递对该变量的引用,即以下代码无效:
foreach (ref string var in arr) {
var = "new value";
}
我研究了一下I found a suggestion to create a "updatable enumerator",但我不知道我应该怎么做。我遵循了一个示例,并尝试为 IEnumerator.Current 方法和我的自定义枚举器 (PeopleEnum.Current) 添加 Current 设置器,但老实说,这是盲目的猜测并且不起作用。我将整个代码粘贴到 pastebin,因为在这里粘贴很长 - custom enumerator attempt。在这段代码中,尝试通过
访问当前元素badClass baddie = new badClass(ref tmp.Current);
导致“属性或索引器可能无法作为 out 或 ref 参数传递”的预期错误
我最终的目标是这样的 - 遍历对象列表,为每个对象生成一个按钮,并为该按钮添加一个 onclick 事件,该事件将打开一个新表单,传递引用对于该对象,以便可以以该新形式编辑其内容。我做了所有这些,但是将对象作为参考而不是只读数据传递,这让我很生气。我将不胜感激任何答案,我可以阅读有关可更新枚举数或想法的链接。
【问题讨论】:
-
对于很多枚举来说,能够替换当前项是没有意义的,所以不能作为通用机制。为什么不使用 for 循环?
-
听起来您应该从对象的属性中设置用户控件的属性...这是您需要的吗?
-
到底是什么问题正在扼杀你。我认为这可能是您没有详细说明的事情。
-
你发现
IEnumerator<>.Current只有一个getter,没有一个setter。这在很大程度上是设计使然,界面的简单性使其非常通用。尤其是赋予 Linq 权力。不是问题,只需使用 for(;;) 循环。
标签: c# object pass-by-reference enumerator