I see what you are talking about. However, the underlying issue is that there are at least 17 different scenarios where the collection of objects is to be used is other classes.
Also, I don't know if you did it intentionally, but the _listControl isn't a List<object> and I'm pretty sure it wouldn't work in my application.
For most of the objects where we are showing the data, there is no implied casting. The controls that we are using won't work in that manner, so our objects must be cast to the object type needed for the control (in this case the FacilityItem object). For example, when we use a checked treeview, we have to utilize the ToCheckableTreeNode method of FacilityItem ... and inside FacilityItem there is other magic that goes on as well. It simplifies the task of populating a myriad of different objects with the data when the object type being populated is not known at design time.
One of the things I didn't talk about in my last couple posts is that the Add method isn't the only way to add objects to the FacilityManager collection of FacilityItem. When the FacilityManager is instantiated, it loads all of the items from the database that meet the criteria passed in the constructor. Those items, as well as any user created items, are displayed in a control ... which control and which type of control is entirely dependent upon the page the user is viewing. In some pages the objects in the manager are displayed in multiple locations because a property in one object may have a loose connection with another object. That is figured out in the code and displayed differently for the user.
I know that I can add a List<FacilityItem> to the FacilityManager class, however, because that collection has other internal methods (I've shown only a simplified version here) and the collection needs to be modular.