C# 1.0(2002年)

  • 基础语法:类、结构体、接口、委托、事件、属性。
  • 基本类型:intstringbool等。
  • 异常处理:try-catch-finally
  • 垃圾回收(GC)机制。

C# 2.0(2005年)

  • 泛型:支持类型安全的集合(如List<T>)。
  • 匿名方法:通过delegate关键字简化委托。
  • 可空类型:Nullable<T>T?语法。
  • 迭代器:yield return简化枚举器实现。
  • 部分类:partial关键字分割类定义。

C# 3.0(2007年)

  • LINQ:语言集成查询(from-where-select语法)。
  • 匿名类型:var x = new { Name = "A" }
  • Lambda表达式:x => x * x替代匿名方法。
  • 扩展方法:通过this修饰静态方法扩展类型。
  • 自动属性:简化属性声明(public int X { get; set; })。

C# 4.0(2010年)

  • 动态类型:dynamic关键字支持运行时类型解析。
  • 命名参数与可选参数:方法调用更灵活。
  • 协变与逆变:泛型接口支持out(协变)和in(逆变)。
  • COM互操作改进:简化Office等组件调用。

C# 5.0(2012年)

  • 异步编程:async/await简化异步代码。
  • Caller信息特性:[CallerMemberName]自动获取调用上下文。

C# 6.0(2015年)

  • Null条件运算符:?.避免空引用异常。
  • 字符串插值:$"{name} is {age}"替代string.Format
  • 表达式体成员:public int X => x * 2;简化单行方法。
  • nameof运算符:编译时获取变量名。
  • 静态导入:using static System.Math直接调用静态方法。

C# 7.0(2017年)

  • 元组与解构:(int x, int y) = GetPoint()
  • 模式匹配:is表达式和switch模式匹配。
  • 局部函数:方法内定义嵌套函数。
  • out变量内联声明:if (int.TryParse(s, out var x))
  • 二进制字面量:0b1010

C# 8.0(2019年)

  • 可空引用类型:显式区分可空与非空引用。
  • 异步流:IAsyncEnumerable<T>支持await foreach
  • 范围和索引:array[1..^1]切片操作。
  • 默认接口方法:接口可包含实现。
  • using声明:隐式作用域简化资源管理。

C# 9.0(2020年)

  • 记录类型:record关键字定义不可变数据模型。
  • 顶级语句:简化控制台程序入口代码。
  • 模式匹配增强:andornot逻辑组合。
  • 目标类型new表达式:Point p = new(1, 2)

C# 10.0(2021年)

  • 全局using指令:全局导入命名空间。
  • 文件级命名空间:减少嵌套代码。
  • 记录结构:record struct定义值类型记录。
  • 插值字符串优化:性能提升。

C# 11.0(2022年)

  • 原始字符串字面量:"""..."""保留格式文本。
  • 泛型数学支持:INumber<T>接口统一数值运算。
  • 必需成员:required修饰符强制初始化属性。
  • 模式匹配改进:列表模式匹配([1, 2, ..])。

C# 12.0(2023年)

  • 主构造函数:类声明中直接定义构造函数参数。
  • 集合表达式:List<int> x = [1, 2, 3];
  • 别名任意类型:using Point = (int x, int y);
  • 默认Lambda参数:Func<int> f = (x = 42) => x;

每个版本均基于.NET运行时更新,部分特性需对应.NET版本支持。

C# 版本特性与 Unity 对应关系

Unity 引擎使用的 C# 版本受限于其内置的 Mono 或 IL2CPP 运行时版本。以下是各版本 C# 的主要特性及其支持的 Unity 版本:


C# 4.0(Unity 5.x 及更早版本)
  • 特性:动态类型(dynamic)、命名参数、可选参数、泛型协变/逆变。
  • Unity 支持:Unity 5.x 及更早版本默认使用 C# 4.0。

C# 5.0(Unity 2017.x 开始部分支持)
  • 特性:异步编程(async/await)、调用方信息特性(CallerMemberName)。
  • Unity 支持:Unity 2017.x 开始支持部分特性(如 async/await),但需手动配置编译器。

C# 6.0(Unity 2018.1+ 实验性支持,2018.3+ 正式支持)
  • 特性
    • 空值条件运算符(?.?[])。
    • 字符串插值($"Hello {name}")。
    • nameof 表达式。
    • 表达式体成员(=>)。
    • 静态 using 声明。
  • Unity 支持:Unity 2018.1 开始实验性支持,2018.3 后默认启用。

C# 7.0(Unity 2018.3+ 部分支持)
  • 特性
    • 元组和析构((int x, int y))。
    • 模式匹配(is 表达式)。
    • out 变量直接声明(TryParse(input, out var result))。
  • Unity 支持:Unity 2018.3 后部分支持,需使用 .NET 4.x 运行时。

C# 7.3(Unity 2019.2+ 默认支持)
  • 特性
    • 改进的泛型约束。
    • ==!= 支持元组比较。
    • fixed 字段无需初始化。
  • Unity 支持:Unity 2019.2 后默认支持,需选择 .NET 4.x 运行时。

C# 8.0(Unity 2020.1+ 部分支持)
  • 特性
    • 可为空引用类型(需手动启用)。
    • 异步流(IAsyncEnumerable)。
    • 范围和索引(^..)。
    • switch 表达式。
  • Unity 支持:Unity 2020.1 开始部分支持,需使用 .NET Core 3.x.NET 5(实验性)。

C# 9.0(Unity 2021.2+ 部分支持)
  • 特性
    • 记录类型(record)。
    • 顶级语句。
    • 模式匹配增强。
  • Unity 支持:Unity 2021.2 开始部分支持,需使用 .NET 5 或更高版本(实验性)。

C# 10.0(Unity 2022.2+ 实验性支持)
  • 特性
    • 全局 using 指令。
    • 文件范围的命名空间。
    • 记录结构(record struct)。
  • Unity 支持:Unity 2022.2 开始实验性支持,需使用 .NET 6

配置 Unity 使用更高版本 C#

  1. 修改 API 兼容级别
    Project Settings > Player > Configuration > Api Compatibility Level 选择 .NET 4.x.NET Standard 2.1

  2. 启用实验性功能
    在 Unity 2020+ 中,可通过 Project Settings > Player > Configuration > Scripting Runtime Version 选择 .NET Core.NET 5+

  3. 手动编辑项目文件
    编辑 .csproj 文件,添加 <LangVersion>latest</LangVersion> 以启用最新语言特性(需编译器支持)。


注意事项

  • Unity 对 C# 新特性的支持通常滞后于官方发布。
  • IL2CPP 可能不支持某些反射或动态特性。
  • 生产环境中建议测试特性兼容性,尤其是跨平台项目。

更多推荐