Tuesday, November 20, 2007

C#: An actual use for a Predicate

I love the List<T> class in C#2.0+, but haven't really used it much beyond as a typed ArrayList.  It's normally plenty.

But today I was building a dynamic CAML string and started doing a bunch of repetitive code like

List clauses = new List();

string foo = GetFooClause();
if (!string.IsNullOrEmpty(foo))

string bar = GetBarClause();
if (!string.IsNullOrEmpty(bar))

when I realized there was a much simpler way:
List clauses = new List();


//remove all empty clauses

The last line is the kicker - List.RemoveAll() takes a Predicate (i.e. a functor with a single parameter) - and String.IsNullOrEmpty() happens to be just the Predicate for the job.

Labels: ,