Как преобразовать цикл foreach с оператором switch в LINQ - PullRequest
0 голосов
/ 30 августа 2018

У меня есть следующее:

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

switch имеет около 15 различных значений для проверки. x имеет 3 свойства: name, value и enum константа для проверки x.name. items - это коллекция x объектов со многими enum константами, но я хочу только найти определенные и применить тот же метод для изменения свойства x.value.

Можно ли использовать linq для преобразования моего foreach как одного вкладыша?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Попробуйте это

items.ToList().Where(x => x.name == firstname1 || x.name == firstname2).ForEach(x => x.Value =  somemethodcall)
0 голосов
/ 30 августа 2018

Ваш код длинный из-за переключателя вместо foreach.

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

можно записать как

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

сам foreach можно записать как

items.Select(SetValueByName);

, где

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

если оптимизация не применима к вашему сценарию, просто

TypeOfX SetValueByName(TypeOfX x)
{
    .. original switch statement
    return x;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...