参数必须在退出时分配
本文关键字:分配 退出 参数 | 更新日期: 2023-09-27 18:19:13
我正试图使用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();
我能想到的最好的方法是这样的扩展方法:
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());
根据文档,使用out
或ref
参数修饰符声明的方法参数通过引用而不是通过值传递。这允许被调用的方法更改调用方作用域中的值。
区别在于用ref
声明的参数可以在从方法返回之前赋值,但是用out
声明的参数必须在从方法返回之前赋值。