我有以下方法:
private int EarthAttributeValue()
{
var totalValue = 0;
foreach (var item in ItemList)
{
switch (item.Attribute)
{
case AttributeEnum.Earth:
totalValue += item.AttributeValue;
break;
}
}
return totalValue;
}
但是我不想为我的枚举中的每个值创建一个新方法,所以我试图为任何属性创建一个通用方法,接收"目标枚举"。作为参数。
我试过这个
private int AttributeValue(AttributeEnum attribute)
{
var totalValue = 0;
foreach (var item in ItemList)
{
switch (item.Attribute)
{
case attribute:
totalValue += item.AttributeValue;
break;
}
}
return totalValue;
}
但它没有构建,说我需要一个常数值的情况下(因为参数是一个变量)。
有什么办法可以做到吗?也许是使用反射?
奥林匹克广播服务公司。我不想用if来代替switch,因为item。属性将会是一个列表,所以作为参数。
我已经创建了这个,用Linqlambda:
替换开关internal int AttributeValue(AttributeEnum attribute)
{
return ItemList
.Where(x => x.Attribute == attribute)
.Sum(x => x.AttributeValue);
}
感谢@TimSchmelter的帮助!