我需要将单个值添加到 IEnumerable(在本例中为 IEnumerable<string[]>
)。为此,我正在创建一个 List<T>
只是为了包装第一个值,以便我可以调用 Concat
:
// get headers and data together
IEnumerable<string[]> headers = new List<string[]> {
GetHeaders()
};
var all = headers.Concat(GetData());
哎呀。有没有更好的办法?您将如何处理附加值的相反情况?
最佳答案
我编写了自定义扩展方法来执行此操作:
public static IEnumerable<T> Append<T>(this IEnumerable<T> source, T item)
{
foreach (T i in source)
yield return i;
yield return item;
}
public static IEnumerable<T> Prepend<T>(this IEnumerable<T> source, T item)
{
yield return item;
foreach (T i in source)
yield return i;
}
在你的场景中,你会写:
var all = GetData().Prepend(GetHeaders());
正如 chilltemp 评论的那样,这不会改变原始集合。以真正的 Linq 方式,它生成一个新的 IEnumerable<T>
.
注意:建议对 source
进行空参数检查。 ,但为简洁起见未显示。
关于c# - 将单个值附加或前置到 IEnumerable<T> 的简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408588/