¿Por qué el compilador Roslyn genera funciones locales con el modificador de acceso internal (en IL, assembly ) en lugar de private ?
private void M() { bool f = true; bool x1() => f; static bool x2() => true; } .method assembly hidebysig static bool '<M>g__x1|0_0' ( valuetype C/'<>c__DisplayClass0_0'& '' ) cil managed { ... } .method assembly hidebysig static bool '<M>g__x2|0_1' () cil managed { ... }Los documentos dicen que debería ser privado: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions
Las funciones locales son métodos privados de un tipo que están anidados en otro miembro.
Debido a que todas las funciones locales son privadas, incluido un modificador de acceso, como la palabra clave privada, genera el error del compilador CS0106
Parece un artefacto de reutilización de código. Roslyn probablemente usa el mismo código para manejar funciones locales y lambdas, pero inyecta definiciones de métodos en diferentes clases.
En el caso de lambda, inyecta el cuerpo de lambda en la clase de cierre generada ( DisplayClass ) y debe ser interno para ser referenciado desde la función de llamada.