2016-11-16 5 views
1

Допустим, у меня есть этот код.Лучшая практика кодирования, чем If-Else

int count = 0; 
int id = GetFirstId(); 
count = getCountById(id); 

if(count == 0){ 
id = GetSecondId(); 
count = getCountById(id); 
    if(count == 0){ 
    id = GetThirdId(); 
    count = getCountById(id); 
    } 
} 

Есть ли лучший способ для этого. Что-то вроде LOOP и CASE Statement внутри лучше?

+0

Какой язык программирования вы используете? –

+0

C#, но я думаю, что эта практика также должна применяться к другим языкам программирования? – Cosytyle

+0

Если у вас есть много предметов, вам обязательно нужно использовать переключатель. –

ответ

4

Если у вас есть другой метод, вы можете перечислить методы, а затем использовать LINQ для получения первого ненулевого count. Он будет работать, если все вашего GetXXXId имеют такую ​​же подпись.

var idGetters = new Func<int>[] 
{ 
    GetFirstId, 
    GetSecondId, 
    GetThirdId 
    // and so on 
}; 

var count = idGetters 
      .Select(x => x()) 
      .Select(GetCountById) 
      .SkipWhile(x => x == 0) 
      .FirstOrDefault(); 
+0

Что делать, если Id не увеличивается. Должен ли я использовать регистр внутри цикла? Тогда есть что-то вроде Case (i): id = 15 – Cosytyle

+0

Я отредактировал вопрос. Кстати спасибо за ответ! – Cosytyle

+0

Удостоверьтесь! Мне очень нравится это решение, оно динамично. Благодаря! – Cosytyle