c# - 在 C# 中,是否可以向集合添加一个值,同时将其分配给另一个变量

标签 c#

我正在使用条件运算符来检查某个值是否已缓存在集合中,如果没有,则按如下方式调用适当的方法:

facilityQuantity = facilityFundedAmts.ContainsKey(facilityId) ? facilityFundedAmts[facilityId] : facilityHolding.Funded();

是否可以通过某种方式将 facilityHolding.Funded() 添加到同一行中的 facilityFundedAmts 集合?

最佳答案

封装你正在做的事情的扩展方法怎么样?您可以将键和一个函数传递给它,如果它不存在则可用于创建该值:

public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, Func<TValue> valueFunc)
{
    TValue value;

    if (!source.TryGetValue(key, out value))
    {
        value = valueFunc();
        source.Add(key, value);
    }

    return value;
}

并按如下方式使用它:

facilityQuantity = facilityFundedAmts.GetOrAdd(facilityId, () => facilityHolding.Funded());

正如评论中所指出的,有一个从方法组到 Func<TValue> 的隐式转换可用, 所以你也可以这样写:

facilityQuantity = facilityFundedAmts.GetOrAdd(facilityId, facilityHolding.Funded);

关于c# - 在 C# 中,是否可以向集合添加一个值,同时将其分配给另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774783/

相关文章:

c# - 推送新 View Controller 时有效地停止 Monotouch 中的 NSTimer

c# - 为什么这个 LINQ 查询非常慢?

c# - 哪种设计模式用于排序和过滤数据?

C#:为什么这个静态赋值不起作用?

c# - 如何在 C# 中将字符串转换为 cfstring

c# - 将内连接 sql 查询转换为 linq

c# - 如何使用 AutoMapper 将列表映射到 ASP.NET MVC 中的 SelectList?

c# - 接口(interface)扩展 - 基类或扩展方法

c# - 在 C# 中更改 Excel 电子表格的 PivotCache 连接

c# - 通过 AngularJS 将 JSON 发布到 Asp.net