使用Lambdas访问列表中的列表?

时间:2015-11-02 07:55:56

标签: c# linq lambda

我是一个尝试学习使用lambdas的初学者, 我的class Character里面有"List<Item> inventory" 可以容纳"class Sword: Item""class Shield: Item"

我希望得到List<float>来显示每个角色的伤害。 damage中的sum of damagesitems inventory(swords and shields)

到目前为止,我知道我可以对我的角色列表中的个别角色执行此操作,并从他的项目中获得损坏的总和。

float damage = characters[0].inventory.Select(item => item.damage).Sum(dmg => dmg);

但是,当我尝试同时完成所有角色时,这不起作用。

List<float> charactersTotalDamagesFromEachCharacter = characters
            .Select(character => character.inventory)
            .Select(item => item)
            .Select(item => item.damage)
            .Sum(dmg => dmg);

我希望得到代表List<float>的{​​{1}}。

2 个答案:

答案 0 :(得分:2)

如果你想知道每个角色的总伤害,你只需要计算每个角色库存的伤害总和(顺便说一下,你可以直接求和而不选择要求和的属性并在之后调用Sum()):

var totalDamagePerCharacter = characters.Select(c => new
{
    Character = c,
    TotalDamage = c.Inventory.Sum(item => item.Damage)
})
.ToList();

但是,如果您不需要知道造成损害的特定角色,并且您只想获得总损失列表,那么只需将角色投射到上面查询中的总损伤:

var listOfTotalDamages = characters.Select(
    c => c.Inventory.Sum(item => item.Damage)).ToList();

答案 1 :(得分:0)

我猜你正在寻找个人伤害,这应该会给你正确的结果: -

List<float> charactersTotalDamagesFromEachCharacter = characters
                                           .Select(x => x.inventory.Sum(z => z.damage))
                                           .ToList();