Могут ли быть частные методы расширения?

Позволять'скажем, у меня есть потребность в простом частном вспомогательном методе, и интуитивно в коде это будет иметь смысл как метод расширения. Есть ли способ инкапсулировать этот помощник в единственный класс, который действительно нуждается в его использовании?

Например, я пытаюсь это:

class Program
{
    static void Main(string[] args)
    {
        var value = 0;
        value = value.GetNext(); // Compiler error
    }

    static int GetNext(this int i)
    {
        return i + 1;
    }
}

Компилятор неувидеть" GetNext() метод расширения. Ошибка:

Метод расширения должен быть определен в неуниверсальном статическом классе

Достаточно справедливо, поэтому я обертываю его в свой собственный класс, но все же инкапсулирую в объекте, к которому он принадлежит:

class Program
{
    static void Main(string[] args)
    {
        var value = 0;
        value = value.GetNext(); // Compiler error
    }

    static class Extensions
    {
        static int GetNext(this int i)
        {
            return i + 1;
        }
    }
}

Все еще нет игры в кости. Теперь ошибка гласит:

Метод расширения должен быть определен в статическом классе верхнего уровня; Расширения - это вложенный класс.

Есть ли веская причина для этого требования? Существуют случаи, когда вспомогательный метод действительно должен быть инкапсулирован в частном порядке, и есть случаи, когда код намного чище и более читабелен / поддерживается, если вспомогательный метод является методом расширения. Для случаев, когда эти два пересекаются, могут ли оба быть удовлетворены, или мы должны выбрать один над другим?