Более компактный способ "возврата прибыли"?
У меня есть этот метод, который дает значения, полученные 2 методами:
private IEnumerable<Node> ParseEmptyElement()
{
foreach (var node in ParseMembersOfObject())
{
yield return node;
}
foreach (var node in ParseNestedProperty())
{
yield return node;
}
}
Это кажется очень многословным для меня.
Есть ли лучший способ выразить "вернуть все значения из MethodX" и после этого сделать то же самое для MethodY?
Пример:
private IEnumerable<Node> ParseEmptyElement()
{
#yield all# items from ParseMembersOfObject();
#yield all# items from ParseNestedProperty();
}
Я не хочу быть силой, чтобы записать циклы foreach в одну строку! но я также не хочу писать полноценные циклы foreach с фигурными скобками и все такое:)
1 ответ
Решение
Как прокомментировал Марк, это эквивалентно:
private IEnumerable<Node> ParseEmptyElement()
{
return ParseMembersOfObject().Concat(ParseNestedProperty());
}
Concat
реализован с использованием отложенного выполнения, так что это не будет оценивать ваши перечислимые элементы раньше.
Между прочим, Concat
реализуется с foreach
циклы в одной строке:
static IEnumerable<TSource> ConcatIterator<TSource>(IEnumerable<TSource> first,
IEnumerable<TSource> second) {
foreach (TSource element in first) yield return element;
foreach (TSource element in second) yield return element;
}
Если вам не нравится Concat, и вам все еще нужны фигурные скобки, вы можете сохранить их и просто отформатировать код более кратко:
private IEnumerable<Node> ParseEmptyElement()
{
foreach (var node in ParseMembersOfObject()) { yield return node; }
foreach (var node in ParseNestedProperty()) { yield return node; }
}