【问题标题】:Create a dictionary in c# through lambda [closed]通过 lambda 在 C# 中创建字典 [关闭]
【发布时间】:2017-11-25 17:24:09
【问题描述】:

我有以下代码:

var dict = new Dictionary<byte?, List<Id>>();
foreach (var record in Records)
{
    if(record.SubId.HasValue)
    {
        dict.Add(SubIdsDictionary[record.SubId.Value], new List<Record> { record });
    }
    else
    {
        dict.Add(IdsDictionary[record.Id.Value], new List<Record> { record });
    }
}

Records 是一个名称的记录列表。在这个记录类中,我有 Id、SubId 和 Companyname。每个名字都有 id 作为强制性但 subid 不是。所以,如果名字有 subid 那么我必须优先考虑 subid 并首先从字典 SubIdsDictionary 中获取新的 sub id(因为 subid 是 ref dict SubIdsDictionary 中的关键)并制作新的subid 作为键,整个记录作为新字典 dict 中的值。但是,如果名称没有 subid,那么我将使用 id 并首先从引用 dict IdsDictionary 中获取新 id,并将新 id 作为键和值将是整个记录。 现在在新字典中,键将混合 id 和 subid,并且记录将作为 List 的值

有人可以帮我通过 lambda 转换这段代码吗?

【问题讨论】:

  • 任何帮助????????
  • Dictionary&lt;byte?, List&lt;Id&gt;&gt;() 我认为你不能有一个字典键为空,来填充你的new List&lt;type&gt;使用“(”,而不是“{”
  • @CelsoLívero new List&lt;T&gt;{ aT, anotherT } 完全有效。这是一个集合初始化器。

标签: c# linq lambda


【解决方案1】:

您可以使用 Linq 中的 ToDictionary 方法。

应该是这样的:

 var dict = Records.ToDictionary(
    r => (r.SubId.HasValue ? SubIdsDictionary[r.SubId.Value] : IdsDictionary[r.Id.Value]), 
    r => new List<Record> {r}
 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2021-02-27
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多