シーケンスに要素を連結する


(๑╹ω╹)<欲しいなあ

と思ったので。

yield return を使用するパターン

Program.cs
/// <summary>
/// シーケンスの前方に要素を連結します
/// </summary>
/// <typeparam name="TSource">入力シーケンスの要素の型</typeparam>
/// <param name="first">連結する最初の要素</param>
/// <param name="second">最初の要素に連結するシーケンス</param>
/// <returns>2つの入力シーケンスの連結された要素が格納されている System.Collections.Generic.IEnumerable&lt;T&gt;</returns>
public static IEnumerable<TSource> Concat<TSource>( this TSource first, IEnumerable<TSource> second )
{
    yield return first;
    foreach ( var _second in second ) { yield return _second; }
}
Program.cs
/// <summary>
/// シーケンスの後方に要素を連結します
/// </summary>
/// <typeparam name="TSource">入力シーケンスの要素の型</typeparam>
/// <param name="first">連結する最初のシーケンス</param>
/// <param name="second">最初のシーケンスに連結する要素</param>
/// <returns>2つの入力シーケンスの連結された要素が格納されている System.Collections.Generic.IEnumerable&lt;T&gt;</returns>
public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, TSource second )
{
    foreach ( var _first in first ) { yield return _first; }
    yield return second;
}

Enumerable.Concat を使用するパターン

Program.cs
/// <summary>
/// シーケンスの前方に要素を連結します
/// </summary>
/// <typeparam name="TSource">入力シーケンスの要素の型</typeparam>
/// <param name="first">連結する最初の要素</param>
/// <param name="second">最初の要素に連結するシーケンス</param>
/// <returns>2つの入力シーケンスの連結された要素が格納されている System.Collections.Generic.IEnumerable&lt;T&gt;</returns>
public static IEnumerable<TSource> Concat<TSource>( this TSource first, IEnumerable<TSource> second )
{
    return Enumerable.Concat( new[ ] { first }, second );
}
Program.cs
/// <summary>
/// シーケンスの後方に要素を連結します
/// </summary>
/// <typeparam name="TSource">入力シーケンスの要素の型</typeparam>
/// <param name="first">連結する最初のシーケンス</param>
/// <param name="second">最初のシーケンスに連結する要素</param>
/// <returns>2つの入力シーケンスの連結された要素が格納されている System.Collections.Generic.IEnumerable&lt;T&gt;</returns>
public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, TSource second )
{
    return Enumerable.Concat( first, new[ ] { second } );
}

エラーチェックがありませんのでご注意下さい。