3

具有以下结构

[[1,10],[2,20],[5,45],[10,34]]

此 foreach 循环查找与“planYear”匹配的第一个元素。如果planYear=5,则将选择“45”的第三个元素值。

List<object> gifts = gifts;
foreach (List<object> item in gifts)
{
  if (item[0] == planYear)
  {
    gift = Convert.ToDouble(item[1]);
    break;
  }
}

什么是类似的 Linq 语句来实现同样的结果?

4

2 回答 2

8
var gift = gifts.Cast<List<object>>()
                .Where(x => x[0] == planYear)
                .Select(x => Convert.ToDouble(x[1]))
                .FirstOrDefault();

如果没有找到匹配的条目gift将是0. 如果这不是您想要的,请First()改用。如果不存在匹配项,这将引发异常。

这个答案假设——就像你的foreach循环一样——里面的每个项目gifts实际上都是一个List<object>. 如果即使一个项目属于不同类型,此代码也会抛出一个InvalidCastException. 如果这是一个问题,请使用OfType而不是Cast.

于 2013-09-10T15:55:41.123 回答
4
var gift = Convert.ToDouble(
               gifts.Cast<List<object>>().First(x => x[0] == planYear)[1]);
于 2013-09-10T16:00:16.683 回答