I'm a java developer but I think this is the same for c#.
I never expose a private collection property because other parts of the program can change it without parent noticing, so that in the getter method I return an array with the objects of the collection and in the setter method I call a clearAll()
over the collection and then an addAll()