我有这种方法产生由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循环:)
正如Marc所说,这是等效的:
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; }
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句