¿Puede haber métodos de extensión privada?

Digamos que necesito un método de ayuda privada simple, e intuitivamente en el código tendría sentido como método de extensión. ¿Hay alguna forma de encapsular a ese ayudante en la única clase que realmente necesita usarlo?

Por ejemplo, intento esto:

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

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

El compilador no "ve" elGetNext() método de extensión El error es:

El método de extensión se debe definir en una clase estática no genérica

Justo lo suficiente, por lo que lo envuelvo en su propia clase, pero aún encapsulado dentro del objeto al que pertenece:

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;
        }
    }
}

Todavía no hay dados. Ahora el error dice:

El método de extensión se debe definir en una clase estática de nivel superior; Extensiones es una clase anidada.

¿Hay alguna razón convincente para este requisito? Hay casos en que un método de ayuda realmente debe encapsularse de manera privada, y hay casos en que el código es mucho más limpio y más legible / compatible si un método de ayuda es un método de extensión. Para los casos en que estos dos se cruzan, ¿podemos estar satisfechos o tenemos que elegir uno sobre el otro?

Respuestas a la pregunta(5)

Su respuesta a la pregunta