Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对所有类属性求和_C#_Asp.net_Class_Attributes - Fatal编程技术网

C# 对所有类属性求和

C# 对所有类属性求和,c#,asp.net,class,attributes,C#,Asp.net,Class,Attributes,我有一个这样的班:班名:男 姓名:丹尼尔| numOfLegs:5 | numOfHands:7 | numOfEyes:10 | numofHeads:80| numofBrains:2 我想将所有属性相加为一个int,但其代码非常长: int sum= Man.numOfLegs+Man.numOfHands+Man.numOfEyes+Man.numofHeads+Man.numofBrains; 问题是我有80多个属性,而且它还在不断增长 请帮帮我:你可以用反射来做。我不知道这是不是最

我有一个这样的班:班名:男

姓名:丹尼尔| 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)))

如果我想把属性放在列表中?感谢您的帮助:@רושמי:更新了答案