我正在尝试使用ConcurrentDictionary
的tryRemove和lambda out我如何收到错误消息Parameter must be assigned upon exit
代码:
_reminders.TryRemove(identifier, (out Reminder reminder) =>
{
//Here i am trying to remove the item from the dictionary and instantly use the out
//of it to perform action on it.
reminder.Cancel();
});
为什么?
因为我发现这段代码有点难看
代码:
Reminder rm;
_reminders.TryRemove(identifier, out rm);
rm.Cancel();
答案 0 :(得分:2)
我能想到的最好的是这样的扩展方法:
static void TryRemoveAndPerformAction<TKey, TValue>(
this ConcurrentDictionary<TKey, TValue> dict,
TKey key, Action<TValue> action)
{
TValue value;
if (dict.TryRemove(key, out value)) action(value);
}
然后你可以这样称呼它:
_reminders.TryRemoveAndPerformAction(identifier, rm => rm.Cancel());
答案 1 :(得分:0)
Per the documentation,使用out
或ref
参数修饰符声明的方法参数通过引用而不是值传递。这允许被调用的方法更改调用者范围中的值。
区别在于,使用ref
MAY 声明的参数在从方法返回之前被赋值,但是使用out
声明的参数必须在从方法返回之前分配一个值。