Maybe I'm stupid, but I don't see any benefit to a generic collection item.
There are some important ones:
- streaming
- notifications
- it has both an index in the collection and a unique ID, index can change, but the ID can not.
- for items specific: type safety of course, without casts.
Otherwise it behaves much like a TList<T>, or TfpList, which is the underlying structure anyway. (I wrote that in the remarks)
It has otherwise different, some say better, semantics than a list.
It is a bit an underrated structure because people found it difficult or cumbersome to use. (It isn't)
But if a TList<T> satisfies your use case, use that. For strings, the standard TStringlist is similar. and also has notifications.
A collection behaves more like a database table than a list. For which it was designed, it is a lightweight database system: You can connect items from different collections over their persisted ID, something you can not do without extra work with a TList<T> and you can stream to and from file.