为何在.NET Framework 4.6.1中可编写局部函数?
为什么.NET Framework 4.6.1能运行C# 7.0的局部函数?
C#版本和.NET Framework版本并非强绑定:从C# 6.0开始,Roslyn编译器和.NET Framework运行时分离,编译器版本决定了你能使用的C#语法特性,而非直接由运行时框架版本决定。只要编译器支持对应C#版本,且特性不依赖新的CLR底层能力,就能在旧框架上运行。
局部函数的编译兼容旧框架:C# 7.0的局部函数编译后,会被转换成普通私有方法(若捕获外部变量则生成闭包类),这些编译后的IL代码完全符合.NET Framework 4.6.1的运行规范,没有用到4.7才新增的CLR特性,所以运行时能正常执行。
开发环境的配置支持:只要你使用Visual Studio 2017及以上版本(自带支持C#7.0的Roslyn编译器),并且在项目设置里将C#语言版本设为7.0或更高,即使项目目标框架是4.6.1,也能顺利编译并运行局部函数代码。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

