Both services.TryAddEnumerable(ServiceDescriptor) and the other group of calls (TryAddSingleton, TryAddScoped, TryAddTransient) seem to do the same thing -- they first check for prior registration of a service in the Dependency injection container and then only register it if it has not already been registered.
Here is the relevant link for the docs: https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-injection --- it doesn't really clarify the difference and I couldn't find much from google search.