c# - 将单个值附加或前置到 IEnumerable<T> 的简单方法是什么?

标签 c# linq ienumerable

我需要将单个值添加到 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/

相关文章:

c# - 为什么 .ForEach() 在 IList<T> 而不是 IEnumerable<T> 上?

c# - 如何更改适配器的IP地址?

C# .net 3.5+ Dictionary<string, string> 键/值对显示值作为默认选择 – MVC 选择列表

c# - 使用 WCF 数据服务时出错

c# - 比较 IEnumerable<T> 的类型

c# - IEnumerable<IEnumerable<int>> - 没有重复的 IEnumerable<int>

c# - 为什么 ASP.NET Web Api 模型绑定(bind)使用参数类型来确定值的来源?

c# - Linq to Entities - 是否可以在对数据库的单个查询中实现这一点?

c# - 如何自动改变kinect传感器角度?

c# - 获取数组最后 N 个元素的最有效方法