必须在退出时分配参数

时间:2014-08-22 23:25:37

标签: c#

我正在尝试使用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();

2 个答案:

答案 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,使用outref参数修饰符声明的方法参数通过引用而不是值传递。这允许被调用的方法更改调用者范围中的值。

区别在于,使用ref MAY 声明的参数在从方法返回之前被赋值,但是使用out 声明的参数必须在从方法返回之前分配一个值。