I'm writing an iterator that needs to pass around a mutable integer.
public IEnumerable<T> Foo(ref int valueThatMeansSomething)
{
// Stuff
yield return ...;
}
This nets me "Error 476 Iterators cannot have ref or out parameters".
What I need is this integer value to be modified in the iterator and usable by the caller of the iterator. In other words, whatever calls Foo()
above wants to know the end value of valueThatMeansSomething
and Foo()
may use it itself. Really, I want an integer that is a reference type not a value type.
Only thing I can think of is to write a class that encapsulates my integer and permits me to modify it.
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 */ }
Is there any class or mechanism to handle this already in the BCL? Any flaws with ValueWrapper<T>
proposed above?
(My actual use is more complicated than the example above so handling the variable inside my foreach
loop that calls Foo()
is not an option. Period.)