David's right, I can't think of a good reason to favor CollectionBase (hopefully it'll be deprecated in 3.0??).
Developers familiar with CollectionBase, but new to Generics might be thrown off by what seems like an inability to expand your collection using generics. For example, your UserCollection class might have implemented a FindById method that looked something like:
public User FindById(int userId)
{ foreach(User user in List)
{ if (user.UserId == userId)
{ return user;
}
}
return null;
}
With generics you don't have a class per-say, but rather a type. The solution is to use an anonymous method (or closure). The same can be achieved via:
int userId =32;
User user = users.Find(delegate(User currentUser)
{ return (currentUser.UserId == userId);
}