Я опубликовал ответ на этот вопрос, включая очень короткую тираду в конце о том, как String.Split() должен принимать IEnumerable‹string > вместо строки[].
Это заставило меня задуматься. Что, если базовый класс Object, от которого наследуется все остальное, предоставил реализацию по умолчанию для IEnumerable, так что все теперь возвращает Enumerator только для одного элемента (самого себя) - если только он не переопределен, чтобы делать что-то еще, например, с классами коллекций.
Идея состоит в том, что тогда, если бы такие методы, как String.Split(), принимали IEnumerable, а не массив, я мог бы передать одну строку функции, и она просто работала бы, вместо того, чтобы много заниматься созданием массива разделителей.
Я уверен, что есть множество причин не делать этого, не последняя из которых заключается в том, что если бы все реализовало IEnumerable, то несколько классов, реализация которых отклоняется от значения по умолчанию, могли бы вести себя иначе, чем вы ожидаете в определенных сценариях. Но я все равно думал, что это будет забавное упражнение: какие еще могут быть последствия?