【问题标题】:Convert IReliableDictionary to IList将 IReliableDictionary 转换为 IList
【发布时间】:2023-04-06 12:36:01
【问题描述】:

我有一个 IReliableDictionary,需要取出字典中的项目并将它们移入 IList 以从我的可靠服务中返回。

似乎我无法执行任何类型的 .ToList,所以我确定我的做法是错误的。

public async Task<IList<CustomerOrderItem>> GetOrdersAsync()
{   


   IReliableDictionary<CustomerOrderItemId, CustomerOrderItem> orderItems =
   await this.StateManager.GetOrAddAsync<IReliableDictionary<CustomerOrderItemId, CustomerOrderItem>>(CustomerOrderItemDictionaryName);

   Dictionary<KeyValuePair<CustomerOrderItemId, CustomerOrderItem>, KeyValuePair<CustomerOrderItemId, CustomerOrderItem>> items = orderItems.ToDictionary(v => v);

   IList<CustomerOrderItem> list = orderItems.ToList(); ???

   ...
}

关于如何从字典中取出项目并将它们放入列表中的任何想法?

【问题讨论】:

标签: azure-service-fabric


【解决方案1】:

IReliableDictionary&lt;K,V&gt; 实现了IEnumerable&lt;KeyValuePair&lt;K, V&gt;&gt;,所以你可以做一个ToList

也许确保命名空间被导入。

【讨论】:

    【解决方案2】:

    IReliableDictionary(就像 IDictionary 一样)是键值对的 IEnumerable,所以你可以这样:

    public async Task<IList<CustomerOrderItem>> GetOrdersAsync()
        {
            IReliableDictionary<CustomerOrderItemId, CustomerOrderItem> orderItems =
            await this.StateManager.GetOrAddAsync<IReliableDictionary<CustomerOrderItemId, CustomerOrderItem>>(CustomerOrderItemDictionaryName);
    
            var list = orderItems.Select(kvp => kvp.Value).ToList();
            return list;
        }
    

    【讨论】:

    • 是的,如果您想要一个值列表而不是 KeyValuePair 列表,这是最好的方法。根据您的使用情况,您可能需要考虑将返回类型更改为 IEnumerable 并仅返回 IEnumerable 选择结果,而不是转换为列表以避免整个列表分配。
    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多