对所有类属性求和

本文关键字:属性 求和 | 更新日期: 2023-09-27 18:16:50

我有一个这样的类:(类名:Man)

Name:"daniel" | numOfLegs: 5 | numOfHands: 7 | numOfEyes: 10 | numofHeads: 80 |numofBrains: 2

我想把所有的属性求和成一个int但是它的代码很长:

int sum= Man.numOfLegs+Man.numOfHands+Man.numOfEyes+Man.numofHeads+Man.numofBrains;

问题是我有超过80个属性,而且还在不断增长。

请帮帮我:

对所有类属性求和

你可以用反射来做。我不知道这是不是最好的办法。如果考虑这个类:

public class Man
{
    public int Foo { get; set; }
    public int Bar { get; set; }
}

那么你可以像这样对它们求和:

var man=new Man(){Bar=12,Foo=21};
var total= man.GetType()
    .GetProperties()
    .Where(w =>w.PropertyType==typeof(int))
    .Sum (s=>(int)s.GetValue(man,null));

总数将是类

中的所有int字段。

编辑

如果你有一个列表。你可以这样做:

var ls=new List<Man>();
ls.Add(new Man(){Bar=12,Foo=21});
var total= ls.Sum(man => man.GetType()
        .GetProperties()
        .Where(w =>w.PropertyType==typeof(int))
        .Sum (s=>(int)s.GetValue(man,null)))