如何在switch case语句中使用enum数组参数?



我有以下方法:

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的帮助!