.NET Framework 与 C# 版本对应关系及部分新特性

下面这个表摘自网上,并不是我的原创,我个人觉得 C# 3.0 开始很方便了。全文请参见:C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)

语言版本发布时间.NET Framework要求Visual Studio版本
C# 1.02002.1.NET Framework 1.0Visual Studio .NET 2002
C# 1.11.22003.4.NET Framework 1.1Visual Studio .NET 2003
C# 2.02005.11.NET Framework 2.0Visual Studio 2005
C# 3.02007.11.NET Framework 2.03.03.5Visual Studio 2008
C# 4.02010.4.NET Framework 4.0Visual Studio 2010
C# 5.02012.8.NET Framework 4.5Visual Studio 20122013
C# 6.02015.7.NET Framework 4.6Visual Studio 2015
C# 7.02017.3.NET Framework 4.6.2Visual Studio 2017
C# 7.12017.6.NET FrameworkVisual Studio 2017 v15.3预览版
C# 8.0待发布

C# 3.0 特性示例:

public Username { get; set; }

C# 4.0 特性示例:

string str = String.Join<int>(",", intList);

C# 6.0 特性示例:

public string Username { get; set; } = "admin"; // 自动属性赋初始值
public string FullName => $"{FirstName}{LastName}"; // 只读属性,返回值为 FirstName + LastName,知道 PHP 的都很轻松看懂。
private int _size = 0;
public int Size
{
get => _size; // 这里不必、也不能添加 return。
set => _size = value;
}
string username = member?.Username; // 如果 member 为 null,返回 null,否则返回 member.Username。
string username = member?.Username ?? "admin"; // 如果 member 为 null,返回 admin,否则返回 member.Username。
myEvent?.Invoke(param); // 事件也可以,用 ?. 就不用人工判断事件是否为 null 了。

也就是说属性、方法都可以用 ?. 了,另请参见:C# 中 ?. 的默认值情况。

注意,上面的版本可能不一定准确,因为我在 .NET 4.0 中使用到了 ?. ?? 符号,这说明要么是版本与 .NET Framework 对应错了,要么是版本具有哪些特性弄错了。

另外,=> 也可以用于简短的方法上面,省略掉方法的大括号。

using 新使用

// 当类名(枚举)冲突时,传统的写法是显式指定命名空间,比如:
Com.Itpow.MyClass myClass = new Com.Itpow.MyClass();

// 现在我们可以利用 using 简化了。
using MyClass = Com.Itpow.MyClass;
MyClass myClass = new MyClass();

// 或者也可以这样:
using MyClass1 = Com.Itpow.MyClass;
using MyClass2 = Com.Cftea.MyClass;
MyClass1 myClass1 = new MyClass1();
MyClass2 myClass2 = new MyClass2();

你可能感兴趣的