Update ref parameter inside anonymous method

anonymous-methods, c#, ref

Solution

In your case there is no viable work-around to this problem: by the time the `Stream.MessageReceived` event fires, the `count` may be well out of scope in the caller of your `DoWork` function.

In situations like that you should encapsulate the `count` in an object, and keep a reference to that object in both the event handler and in the caller, like this:

class Counter {
    public int Value {get;private set;}
    public void Increment() {Value++;}
}
void DoWork(Counter count) {
    MessageStream Stream = new MessageStream();
    Stream.MessageReceived += (o, args) => {
        count.Increment();
    };
}

Problem

Is there a workaround to update a ref parameter inside an anonymous method? I know that the an anonymous method doesn't allow access to ref parameters of the outer scope, but is there another way to do it? I am using an external library for the MessageStream so cannot alter the arguments of the delegate... ``` void DoWork(ref int count) { MessageStream Stream = new MessageStream(); Stream.MessageReceived += (o, args) => { //Error cannot use ref or out parameter inside anonymous method count++; }; } ```

Original source