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