時々、最後のアイテムを除いて、各アイテムの後に新しいアイテムを挿入してリストを処理する必要があることに気付きます。文字列のリストの各項目の間にコンマを入れる方法と似ています。
毎回最後(または最初)のアイテムの特殊なケースをコーディングすることにうんざりしていたので、Linqスタイルの拡張機能でパターンをキャプチャしました。
public static IEnumerable<T> Separate<T>(this IEnumerable<T> source,
Func<T> separator)
{
bool first = true;
foreach (T item in source)
{
if (first)
first = false;
else
yield return separator();
yield return item;
}
}
たとえば、これにより、フロードキュメントをプログラムで簡単にハイパーリンクで埋めることができますが、各ハイパーリンクの間に改行が入ります。
para.Inlines.AddRange(_recentFiles.Select(f => f.ToHyperlink())
.Separate(() => new LineBreak()));
これがSystem.Linq.Enumerable(このようなものを書いた直後に私が通常発見するもの)にまだ存在しないと仮定すると、問題は、Separate
他の機能フレームワークまたは言語で通常呼び出されるリストでのこの操作は何ですか?