【发布时间】:2010-11-06 05:31:54
【问题描述】:
我正在编写一个需要传递可变整数的迭代器。
public IEnumerable<T> Foo(ref int valueThatMeansSomething)
{
// Stuff
yield return ...;
}
这让我“错误 476 迭代器不能有 ref 或 out 参数”。
我需要的是这个整数值在迭代器中被修改并且可以被迭代器的调用者使用。也就是说,上面调用Foo() 想知道valueThatMeansSomething 的最终值,Foo() 可以自己使用。真的,我想要一个引用类型而不是值类型的整数。
我唯一能想到的就是写一个类来封装我的整数并允许我修改它。
public class ValueWrapper<T>
where T : struct
{
public ValueWrapper(T item)
{
this.Item = item;
}
public T Item { get; set; }
}
所以:
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()的变量不是一个选项。句号。)
【问题讨论】:
标签: c# .net-3.5 iterator value-type reference-type