Если бы это был мой код, скорее всего, это выглядело бы так:
foreach(var name in dirs // dunno if "name" is correct :)
.Select(d => MyMethod(d)) // or .Select(MyMethod), depending
.Where(n => n != null)) {
myList.Items.Add(name);
}
Of, если AddRange поддерживается:
myList.Items.AddRange(
dirs.Select(d => MyMethod(d))
.Where(n => n != null));
Однако , я не нахожу ничего страшного в опубликованном случае foreach
, и фактически: foreach { if ... }
является очень желательным в случаях.
Это потому, что он может быть тривиально расширен до foreach { if ... else ... }
. В C # 3.0 / 4.0 нет очень дружественного способа работы с секционированными списками, и в случаях, когда заказ импортируется, подход секционирования и , а затем обработка списков по отдельности не является жизнеспособным решением. В таких случаях я все еще обычно (но не всегда) использую LINQ для максимально возможного преобразования:
foreach(var name in dirs
.Select(d => MyMethod(d))) {
if (name != null) {
myList.Items.Add(name);
} else {
SingMerrySongsAndDanceAHappyLittleJig(); // or ... whatever
}
}
I не использовать ForEach
для побочных эффектов, а I избегать побочных эффектов в запросах LINQ. Это включает исключения! Большая часть моего кода, имеющего дело с LINQ, на самом деле возвращает IList<T>
, а не IEnumerable<T>
, чтобы убедиться, что он «принудительно» в соответствующем контексте. Лень, если хорошо, за исключением случаев, когда это не так: C # не Haskell.
Удачного кодирования.