Ваш код длинный из-за переключателя вместо 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;
}