ジェネリックと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でないので,それでダメなのかな?