首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentDictionary Lazy AddOrUpdate

ConcurrentDictionary Lazy AddOrUpdate
EN

Stack Overflow用户
提问于 2015-05-25 14:29:39
回答 1查看 2.3K关注 0票数 4

我为C#找到了这个扩展,可以将GetOrAdd转换为Lazy,我也想对AddOrUpdate做同样的工作。

有人能帮我把这个转换成AddOrUpdate吗?

代码语言:javascript
复制
 public static class ConcurrentDictionaryExtensions
{
    public static TValue LazyGetOrAdd<TKey, TValue>(
        this ConcurrentDictionary<TKey, Lazy<TValue>> dictionary,
        TKey key,
        Func<TKey, TValue> valueFactory)
    {
        if (dictionary == null) throw new ArgumentNullException("dictionary");
        var result = dictionary.GetOrAdd(key, new Lazy<TValue>(() => valueFactory(key)));
        return result.Value;
    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-25 14:39:26

以下是:

代码语言:javascript
复制
public static TValue AddOrUpdate<TKey, TValue>(this ConcurrentDictionary<TKey, Lazy<TValue>> dictionary, TKey key, Func<TKey, TValue> addValueFactory, Func<TKey, TValue, TValue> updateValueFactory)
{
    if (dictionary == null) throw new ArgumentNullException("dictionary");
    var result = dictionary.AddOrUpdate(key, new Lazy<TValue>(() => addValueFactory(key)), (key2, old) => new Lazy<TValue>(() => updateValueFactory(key2, old.Value)));
    return result.Value;
}

注意第二个参数的格式:返回新Lazy<>对象的委托.因此,从某种角度来看,它是双重懒惰的:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30440638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档