(๑╹ω╹)<欲しいなあ
と思ったので。
yield return を使用するパターン
Program.cs
/// <summary>
/// シーケンスの前方に要素を連結します
/// </summary>
/// <typeparam name="TSource">入力シーケンスの要素の型</typeparam>
/// <param name="first">連結する最初の要素</param>
/// <param name="second">最初の要素に連結するシーケンス</param>
/// <returns>2つの入力シーケンスの連結された要素が格納されている System.Collections.Generic.IEnumerable<T></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<T></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<T></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<T></returns>
public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, TSource second )
{
return Enumerable.Concat( first, new[ ] { second } );
}
エラーチェックがありませんのでご注意下さい。