Anonymous generic methods making things "just work"

        foreach (T p in list)
            if (pred(p))
                results.Add(p);

        return results;
    }

    // Not too hard to imagine the other relational operators here, too
}

// Usage:
class Person
{
    private string firstName;
    private string lastName;

    public Person(string fn, string ln, int age) {
        this.firstName = fn;
        this.lastName = ln;
    }

    public string FirstName {
        get { return firstName; }
        set { firstName = value; }
    }
    public string LastName {
        get { return lastName; }
        set { lastName = value; }
    }
    public override string ToString() {
        return "[Person [" + firstName + "]" + " " + "[" + lastName + "]" + "]";
    }
}

class Program {
    static void Main(string[] args) {
        Person cg = new Person("Cathi", "Gero", 35);
        Person tn = new Person("Ted", "Neward", 35);
        Person sg = new Person("Stephanie", "Gero", 12);
        Person mn = new Person("Michael", "Neward", 12);

        List<Person> list = new List<Person>();
        list.Add(cg);
        list.Add(tn);
        list.Add(sg);
        list.Add(mn);

        List<Person> newards = 
            SetUtils.Project<Person>(list, 
                delegate (Person p) { if (p.LastName == "Neward") return true; else return false; } );
        foreach (Person p in newards)
            Console.WriteLine(p);
    }
}

Any more questions? (This is why having (1) a system that supports managed function pointers directly and (2) a generics system that doesn’t rely on type erasure is so powerful. Hint, Hint, Sun guys….)