如何返回IEnumerable<;T>;对于单个项目
本文关键字:gt 于单个 项目 何返回 lt 返回 IEnumerable | 更新日期: 2023-09-27 18:27:58
我有一个函数,它可以返回项目列表或单个项目,如下所示(伪代码)
IEnumerable<T> getItems()
{
if ( someCondition.Which.Yields.One.Item )
{
List<T> rc = new List<T>();
rc.Add(MyRC);
foreach(var i in rc)
yield return rc;
}
else
{
foreach(var i in myList)
yield return i;
}
}
第一部分似乎有点笨拙,希望使其可读
IEnumerable<T> getItems()
{
if ( someCondition.Which.Yields.One.Item )
{
yield return MyRC;
}
else
{
foreach(var i in myList)
yield return i;
}
}
您不需要做任何事情:
yield return MyRC;
您通常逐个返回项目,而不是在集合中分组。
但如果它是IEnumerable<IList<T>>
,那就不一样了。只需返回:
yield return new[] { singleItem };
或者如果是IEnumerable<List<T>>
,则
yield return new List<T> { singleItem };
首先不清楚是否需要使用迭代器块。您需要/想要推迟执行吗?如果调用者多次迭代返回的序列,您是否需要/想要多次评估条件?如果没有,只需使用:
IEnumerable<T> GetItems()
{
if (someCondition.Which.Yields.One.Item)
{
return Enumerable.Repeat(MyRC, 1);
}
else
{
// You *could* just return myList, but
// that would allow callers to mess with it.
return myList.Select(x => x);
}
}
List<T>
是不必要的。yield
关键字的存在是有原因的。
IEnumerable<T> getItems(){
if ( someCondition.Which.Yields.One.Item )
{
yield return MyRC;
}
else
{
foreach(var i in myList)
yield return i;
}
}
关于:
IEnumerable<T> getItems(){
if ( someCondition.Which.Yields.One.Item )
{
yield return MyRC;
}
else
{
foreach(var i in myList)
yield return i;
}