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).