"yield return" 更紧凑的方式?
More compact way for "yield return"?
我有这个方法可以产生 2 种方法产生的值:
private IEnumerable<Node> ParseEmptyElement()
{
foreach (var node in ParseMembersOfObject())
{
yield return node;
}
foreach (var node in ParseNestedProperty())
{
yield return node;
}
}
对我来说非常冗长。
有没有更好的表达方式 "yield all values from 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
是 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; }
}
我有这个方法可以产生 2 种方法产生的值:
private IEnumerable<Node> ParseEmptyElement()
{
foreach (var node in ParseMembersOfObject())
{
yield return node;
}
foreach (var node in ParseNestedProperty())
{
yield return node;
}
}
对我来说非常冗长。
有没有更好的表达方式 "yield all values from 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
是 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; }
}