2011-01-11 4 views
3

У меня есть эта функция -Более короткий способ написать следующую функцию в C#?

public int GetAvgResult() 
{ 
var weeklyvalues=GetWeeklyValues();//gets list of weekly values. 
if (weeklyvalues.Count == 0) 
       return 0; 
      return (weeklyvalues.Sum()/weeklyvalues.Count); 
} 

Есть более короткий путь, чтобы написать это с помощью ?: или, может быть что-то еще?

+2

почему вы хотите написать его короче? Я думал, что это будет очень loooooooong функция. –

+0

точно так же, как я сейчас переписываю код. Так что я думал, что это может быть лучший способ написать это ... и может выучить некоторые новые способы. Спасибо всем за их ответы! – Vishal

ответ

11
public double GetAvgResult() 
{ 
    // Assumes GetWeeklyValues() never returns null. 
    return GetWeeklyValues().DefaultIfEmpty().Average(); 
} 

Обратите внимание, что это возвращает double, который я предполагаю, что вы на самом деле покупке (в среднем кучу целых чисел логически не является целым числом). Вы можете привести его к int, если это необходимо, или если вы хотите придерживаться целой математики всего пути:

var seq = GetWeeklyValues().DefaultIfEmpty(); 
return seq.Sum()/seq.Count(); 
+2

Это побеждает награду за лаконичность. – Skurmedel

+0

Awesomeness ... Большое спасибо! – Vishal

2
public int GetAvgResult() 
{ 
    var weeklyvalues = GetWeeklyValues(); 
    return (weeklyvalues.Count != 0) ? (weeklyvalues.Sum()/weeklyvalues.Count) : 0; 
} 

или:

public int GetAvgResult() 
{ 
    return GetWeeklyValues().DefaultIfEmpty().Average(); 
} 
2
public int GetAvgResult() 
{ 
    var weeklyvalues = GetWeeklyValues(); //gets list of weekly values. 
    return weeklyvalues.Count == 0 ? 0 : weeklyvalues.Sum()/weeklyvalues.Count; 
} 

Это столь же коротким, как я бы попытаться сделать это. Есть ли какая-то конкретная причина (кроме кода для гольфа), которую вы пытаетесь использовать для низкого количества символов?

1
public int GetAvgResult() 
{ 
var weeklyvalues = GetWeeklyValues();//gets list of weekly values. 
return (weeklyvalues.Count == 0) ? 0 : (weeklyvalues.Sum()/weeklyvalues.Count); 
} 
1
public int GetAvgResult() 
{ 
    var weeklyvalues=GetWeeklyValues();//gets list of weekly values. 
    return weeklyvalues.Count == 0 
     ? 0 
     : (weeklyvalues.Sum()/weeklyvalues.Count); 
} 
Смежные вопросы