Tubería hacia adelante en C #

Continuomi investigacion de expresar ideas de F # en C #, quería un operador de canalización directa. Para cualquier cosa envuelta en un IEnumerable, ya lo tenemos, como puede .NextFunc () al contenido de su corazón. Pero, por ejemplo, si tiene una reducción similar al doblez al final, no puede alimentar el resultado de eso en una función.

Aquí hay dos métodos de extensión, me preguntaba si alguien más había intentado esto, y si es una buena idea o no (EDITAR: ahora conTal vez Earwicker incluido):

public static void Pipe<T>(this T val, Action<T> action) where T : class
{ if (val!=null) action(val); }

public static R Pipe<T, R>(this T val, Func<T, R> func) where T : class where R : class
{ return val!=null?func(val):null; }

Luego puedes escribir algo como:

Func<string, string[]> readlines = (f) => File.ReadAllLines(f);
Action<string, string> writefile = (f, s) => File.WriteAllText(f, s);

Action<string, string> RemoveLinesContaining = (file, text) =>
    {
        file.Pipe(readlines)
            .Filter(s => !s.Contains(text))
            .Fold((val, sb) => sb.AppendLine(val), new StringBuilder())
            .Pipe((o) => o.ToString())
            .Pipe((s) => writefile(file, s));
    };

(Lo sé, Filter == Where en C # y Fold == Aggregate, pero quería rodar el mío, y podría haber hecho WriteAllLines, pero ese no es el punto)

EDITAR: correcciones según el comentario de Earwicker (si lo he entendido correctamente).

Respuestas a la pregunta(4)

Su respuesta a la pregunta