Linq表达不按预期工作

时间:2016-05-10 11:58:30

标签: c# linq

我想从字符串集合中选择一些值,我使用LINQ编写一个值,使用foreach语句编写一个。

使用foreach版本,我会得到大约300个条目的列表。

List<string> res = new List<String>();
foreach (var l in anchors)
{
      if (l.Attributes["href"] != null)
      {
          res.Add(l.Attributes["href"].Value);
      }
}

使用LINQ版本,我得到null

IEnumerable<string> res2 = anchors.Select(l => l?.Attributes["href"]?.Value);

2 个答案:

答案 0 :(得分:3)

使用linq,您也可以获取空值并将其添加到您的枚举中。它与你的foreach不完全相同。将其更改为:

IList<string> res2 = anchors.Where(l=>l.Attributes["href"] != null).Select(l => l.Attributes["href"].Value).ToList();

答案 1 :(得分:1)

.? syntax如果应用的项目返回null,则返回null。在这种情况下,null会添加到输出中。

使用支票if (l.Attributes["href"] != null),它不会添加到输出中。

要在LINQ中模仿,请添加Where子句。