我有这种方法可以产生2种方法产生的值:
private IEnumerable<Node> ParseEmptyElement()
{
foreach (var node in ParseMembersOfObject())
{
yield return node;
}
foreach (var node in ParseNestedProperty())
{
yield return node;
}
}
对我来说,似乎非常详细。
是否有更好的方式来表达&#34;从MethodX&#34中获得所有价值;之后,对MethodY做同样的事情吗?
示例:
private IEnumerable<Node> ParseEmptyElement()
{
#yield all# items from ParseMembersOfObject();
#yield all# items from ParseNestedProperty();
}
我不想强迫将 foreach循环写入一行!但是我也不想用大括号和所有东西写完全成熟的 foreach循环:)
答案 0 :(得分:2)
正如Marc评论的那样,这是等价的:
private IEnumerable<Node> ParseEmptyElement()
{
return ParseMembersOfObject().Concat(ParseNestedProperty());
}
Concat
是使用延迟执行实现的,所以这不会提前评估你的枚举。
顺便提一下,Concat
为implemented,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; }
}