Моя цель состоит в том, чтобы вернуть первый элемент Foo
из списка foos, который соответствует условию перечисления Boo
, и он должен иметь приоритет по значению Boo
, как показано в примере, если ни один из элементов соответствует условию, а затем просто вернуть первый элемент.
Модель:
class Foo
{
E_Boo Boo { get; set; }
}
enum E_Boo
{
Undefined = 0,
Jessie = 1,
Abby = 2,
Felix = 3,
Lacey = 4,
Lucia = 5,
Anisa = 6
}
Это то, что я пытался, это работает:
public Foo GetFooByBooPriority(IEnumerable<Foo> foos)
{
if(foos.Any(x => x.Boo == E_Boo.Abby))
return foos.First(x => x.Boo == E_Boo.Abby);
else if (foos.Any(x => x.Boo == E_Boo.Lacey))
return foos.First(x => x.Boo == E_Boo.Lacey);
else if (foos.Any(x => x.Boo == E_Boo.Lucia))
return foos.First(x => x.Boo == E_Boo.Lucia);
else if (foos.Any(x => x.Boo == E_Boo.Felix))
return foos.First(x => x.Boo == E_Boo.Felix);
else if (foos.Any(x => x.Boo == E_Boo.Anisa))
return foos.First(x => x.Boo == E_Boo.Anisa);
else if (foos.Any(x => x.Boo == E_Boo.Jessie))
return foos.First(x => x.Boo == E_Boo.Jessie);
else
return foos.First();
}
Любая идея, как улучшить этот приоритетный ретривер с точки зрения производительности и более чистого кода?
ОБНОВЛЕНИЕ:
В Приоритете logi c необходимо отделить от определения enum E_Boo
, другими словами, Если определение перечисления будет изменено, логика приоритетов c должна остаться такой же.