Tag: visual-studio

.net – C#的正确版本号是什么?

C#的正确版本号是什么?什么时候出来?为什么我找不到关于C#3.5的答案? 这个问题主要是为了帮助那些使用不正确的版本号搜索答案的人,例如C#3.5。希望是任何未能找到错误版本号的答案的人都会找到这个问题,然后再使用正确的版本号进行搜索。 C#语言版本历史: 这些是在撰写本文时已知的C#版本: 使用.NET 1.0和VS2002发布的C#1.0(2002年1月) C#1.2(奇怪的是); 与.NET 1.1和VS2003一起发布(2003年4月)。调用Dispose实现的IEnumerators的第一个版本IDisposable。其他一些小功能。 C#2.0随.NET 2.0和VS2005发布(2005年11月)。主要新功能:泛型,匿名方法,可空类型,迭代器块 随.NET 3.5和VS2008发布的C#3.0(2007年11月)。主要新功能:lambda表达式,扩展方法,表达式树,匿名类型,隐式类型(var),查询表达式 C#4.0随.NET 4和VS2010发布(2010年4月)。主要新功能:后期绑定(dynamic),委托和接口通用方差,更多COM支持,命名参数,元组数据类型和可选参数 C#5.0随.NET 4.5和VS2012一起发布(2012年8月)。主要功能:异步编程,来电信息属性。突破变化:循环变量闭包。 C#6.0随.NET 4.6和VS2015一起发布(2015年7月)。由Roslyn实施。功能:自动实现属性的初始化程序,使用指令导入静态成员,异常过滤器,元素初始化程序,awaitin catch和集合初始值设定项中的finally扩展Add方法。 .NET 4.7和VS2017发布的C#7.0(2017年3月)主要新功能:元组,ref本地和ref返回,模式匹配(包括基于模式的switch语句),内联out参数声明,本地函数,二进制文字,数字分隔符和任意异步返回。 随VS2017 v15.3发布的C#7.1(2017年8月)新功能:异步主,元组成员名称推断,默认表达式,与泛型的模式匹配。 随VS2017 v15.5发布的C#7.2(2017年11月)新功能:私有保护访问修饰符,Span <T>,又名内部指针,又名stackonly结构,其他所有内容。 随VS2017 v15.7(2018年5月)发布的C#7.3。新功能:枚举,委托和unmanaged泛型类型约束。ref重新分配。不安全的改进:stackalloc初始化,取消固定的索引fixed缓冲区,自定义fixed语句。改进了重载分辨率。初始化器和查询中的表达式变量。==并!=为元组定义。现在,属性可以定位自动属性的支持字段。 C#8.0目前处于预览状态。预期的新功能:不可为空的引用类型,IAsyncEnumerable<T>支持,范围和默认接口方法。 针对OP的问题: C#的正确版本号是什么?什么时候出来?为什么我找不到关于C#3.5的答案? 没有C#3.5这样的东西 – 这里引起混淆的原因是.NET 3.5中存在C#3.0。然而,语言和框架是独立版本的 – 就像CLR一样,.NET 2.0到.NET 2.0版本为2.0,.NET 4引入了CLR 4.0,尽管服务包也是如此。.NET 4.5中的CLR有各种改进,但版本控制还不清楚:在某些地方它可能被称为CLR 4.5(例如,这个MSDN页面用于指代它),但该Environment.Version属性仍然报告4.0。 XXX。 有关语言,运行时和框架版本之间关系的更多详细信息,请参阅深度网站中的C#。这包括有关在面向.NET 2.0时可以使用哪些C#3.0功能的信息。(如果有人想将所有内容都纳入此维基答案,欢迎他们参加。) 截至2017年5月3日,C#语言团队在其github repo上创建了C#版本和功能的历史:C#语言版本中添加的功能。还有一个页面可以跟踪即将推出的和最近实现的语言功能。 处理C#的版本号时最大的问题是它与.NET Framework的版本无关,它似乎是由于Visual Studio和.NET Framework之间的同步版本。 C#的版本实际上绑定到编译器,而不是框架。例如,在Visual Studio 2008中,您可以编写C#3.0并以.NET Framework