Ответ 1
Почему методы расширения допускаются только в не-вложенном, неэквивалентном статическом классе?
Как указывает Пратик, вопрос, с которым мы сталкиваемся, не "почему методы расширения не допускаются во вложенных или общих классах?" Вопрос, с которым мы сталкиваемся как разработчики языка, - "почему следует использовать методы расширения во вложенных или общих классах?"
Если эта функция не оправдана некоторыми потребностями пользователя в реальном мире, мы не собираемся брать на себя значительные затраты на проектирование, внедрение, тестирование, документирование и поддержку этой функции.
В основном, методы расширения были разработаны для работы LINQ. Все, что не помогло сделать работу LINQ, было сокращено. LINQ требует только методов расширения в статических, не общих, не вложенных классах для работы, так что мы разработали и внедрили.
Если у вас есть сценарий, в котором методы расширения будут полезны в нестатических, общих или вложенных классах, я с удовольствием рассмотрю сценарий. Чем больше реалистичных сценариев мы получаем, тем больше вероятность того, что мы создадим функцию на каком-то гипотетическом языке будущего, который приносит пользу этим сценариям.
Бесполезно ли рассматривать методы расширения в вложенном, статическом классе generic?
Нет, это отличная идея рассмотреть это. Мы бы отказались от своих обязанностей, если бы не рассматривали его. Мы долгое время рассматривали его и решили, что на основе этого соображения затраты на выполнение этой функции не оправдались преимуществами, которые начисляются.