How to circumvent using an out parameter in an anonymous method block?

anonymous-methods, c#, out-parameters

Solution

public bool TryGetValue(TKey key, out TValue value)
{
    bool got = false;            
    TValue tmp = default(TValue); // for definite assignment
    WithReaderLock(delegate
    {
        got = dictionary.TryGetValue(key, out tmp);
    });
    value = tmp;
    return got;
}

(edited - small bug)

For info, in .NET 3.5 you might want to use the `Action` delegate instead of rolling your own, since people will recognise it more. Even in 2.0, there are lots of `void Foo()` delegates: `ThreadStart`, `MethodInvoker`, etc - but `Action` is the easiest to follow ;-p

Problem

The following method does not compile. Visual Studio warns "An out parameter may not be used within an anonymous method". The `WithReaderLock(Proc action)` method takes a `delegate void Proc()`. ``` public Boolean TryGetValue(TKey key, out TValue value) { Boolean got = false; WithReaderLock(delegate { got = dictionary.TryGetValue(key, out value); }); return got; } ``` What's the best way to get this behavior? (Please refrain from providing advice on threadsafe dictionaries, this question is intended to solve the out parameter problem in general).

Original source