具有以下结构
[[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声明会是什么?
答案 0 :(得分: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
。
答案 1 :(得分:4)
var gift = Convert.ToDouble(
gifts.Cast<List<object>>().First(x => x[0] == planYear)[1]);