Copying collection to list can be done with Enumerable.ToList
extension method.
If you want to detect type via reflection - Type.IsGenericType and Type.GetGenericTypeDefinition will let you detect if type of given object is ObservableCollection<T>
. Than Type.GetGenericArguments will give the exact type. At that point you should be able to create your own collection of element of that type and copy elements from original collection into new one.