ジェネリックとPredicate

おかげさまで,ずいぶん慣れました.
たとえばEmpty文字列を全て削除したいときには

class Program
{
    static void Main(string[] args)
    {
        string[] arr = 
            {"", "aaa", "bbb", "", "", "ccc", ""};
        List<string> arrList = new List<string>(arr);

        // arrList.ForEach(delegate(string s)
        //   { arrList.Remove(...) はダメ!!
        arrList.RemoveAll(delegate(string s)
            { return s==""; });
        arrList.ForEach(delegate(string s)
            { Console.WriteLine(s); });
    }
}

と書けますね.for/foreachループがないのがちょっとおしゃれでしょうか?(単に読みづらくしているだけの気がするけど)


文字列の前後にprefix/suffixを付けるのだったらConvertAllが使えそうです.

class Program
{
    static void Main(string[] args)
    {
        string[] arr = 
            {"", "aaa", "bbb", "", "", "ccc", ""};
        List<string> arrList = new List<string>(arr);

        List<string> decoratedList = arrList.ConvertAll(
      new Converter<string, string>(decorator));
        arrList.ForEach(delegate(string s)
            { Console.WriteLine(s); });
    }
    static string decorator(string s)
    {
        return "/* " + s + " */";
    }
}

これで全く問題ないのですが,せっかくなので(?)匿名メソッドを使いたいところ.でも今日のところはうまいやり方が見つかりませんでした.RemoveAllなどには引数がPredicate(述語?)となっているけどConvertAllはPredicateでないので,それでダメなのかな?