如何将带有switch语句的foreach循环转换为LINQ

时间:2018-08-29 21:30:23

标签: linq foreach

我有以下内容:

  foreach (var x in items)
                {
                    switch (x.name)
                    {
                        case firstname1:
                        case firstname2:
                        case firstname3:                            .
                            x.Value =  somemethodcall;
                            break;
                    }
                }

switch具有大约15个不同的值要检查。 x具有3个属性:namevalueenum常数,用于检查x.nameitems是具有许多x常量的enum对象的集合,但是我只想找到某些常量并应用相同的方法来更改x.value属性。

是否可以使用linq将我的foreach转换为一个内衬?

2 个答案:

答案 0 :(得分:0)

您的代码很长,因为切换而不是foreach。

glGetError

可以写为

switch (x.name)
{
    case firstname1:
    case firstname2:
    case firstname3:

foreach本身可以写为

var names = new []{firstname1, firstname2, firstname3};
if (names.Contains(x.name)) 

其中

items.Select(SetValueByName);

如果优化不适用于您的情况,只需

string[] names = new []{firstname1, firstname2, firstname3};
TypeOfX SetValueByName(TypeOfX x)
{
    if(names.Contains(x.name))
    {
         x.Value = somemethodcall;
    }
    return x;
}

答案 1 :(得分:0)

尝试一下

items.ToList().Where(x => x.name == firstname1 || x.name == firstname2).ForEach(x => x.Value =  somemethodcall)