用途
本技能适用于以下场景:编写新的 C# 代码或重构现有代码;为库或服务设计公共 API;优化性能关键代码路径;实现强类型的领域模型;构建大量使用 async/await 的应用程序;处理二进制数据、缓冲区或高吞吐量场景。
核心原则
技能列出八条核心原则:默认不可变性(使用 record 类型和 init-only 属性);类型安全(利用可空引用类型和值对象);现代模式匹配(广泛使用 switch 表达式和模式);异步优先(优先使用带正确取消支持的异步 API);零分配模式(在性能关键代码中使用 Span<T> 和 Memory<T>);API 设计(接受抽象类型,返回适当具体的类型);组合优于继承(避免抽象基类,优先组合);值对象使用结构体(使用 readonly record struct)。
主要能力与语言模式
记录类型(C# 9+):用于 DTO、消息、事件和领域实体,可用 IReadOnlyList 承载集合,可在构造函数中做校验。技能说明了 record class(引用类型,用于实体、聚合、多属性 DTO)与 record struct(值类型,用于值对象)的选择依据。
值对象以 readonly record struct 实现:用于获得性能与值语义,要求使用显式转换、禁止隐式转换运算符。示例包括 OrderId、Money、CustomerId 等。
模式匹配(C# 8-12):使用 switch 表达式、属性模式、关系模式、列表模式,示例为基于订单金额的折扣计算。
可空引用类型(C# 8+):在 .csproj 中通过 <Nullable>enable</Nullable> 启用,显式处理 null,使用模式匹配进行空值判断,使用 ArgumentNullException.ThrowIfNull(C# 11+)作为守卫子句。
组合优于继承:避免抽象基类,使用接口加组合、静态辅助方法以及带工厂方法的记录类型来表达变体。
性能模式
异步最佳实践:始终接受 CancellationToken(默认值为 default);在库代码中使用 ConfigureAwait(false);绝不阻塞异步代码(不用 .Result 或 .Wait());使用链接的 CancellationTokenSource 实现超时;对频繁调用且常为同步的方法使用 ValueTask;使用 IAsyncEnumerable 进行流式处理,并配合 [EnumeratorCancellation]。
Span 与 Memory:同步零分配操作使用 Span<T>,异步场景使用 Memory<T>,大块临时缓冲区使用 ArrayPool<T>。
错误处理与元编程
错误处理采用 Result 类型:对预期错误使用领域特定的结果类型(而非通用 Result<T>),异常仅用于非预期/系统错误。
避免基于反射的元编程:明确禁用 AutoMapper、Mapster、ExpressMapper,改用显式映射扩展方法;确实需要访问私有成员时使用 UnsafeAccessorAttribute(.NET 8+)。
代码组织
示例展示按文件组织领域类型的方式:主领域类型(record Order)、状态枚举(OrderStatus)、相关类型(OrderItem)、值对象(OrderId)、错误类型(OrderError)。
最佳实践摘要
推荐做法包括:DTO/消息/领域实体用 record;值对象用 readonly record struct;使用 switch 表达式模式匹配;启用并遵守可空引用类型;所有 I/O 用 async/await;所有异步方法接受 CancellationToken;高性能场景用 Span<T>/Memory<T>;接受抽象(IEnumerable<T>、IReadOnlyList<T>);预期错误用 Result<T, TError>;大分配用 ArrayPool<T> 池化缓冲区;优先组合。
应避免:能用 record 时不用可变类;值对象不用 class;不建深层继承层次;不忽略可空引用类型警告;不阻塞异步代码;Span<byte> 足够时不用 byte[];不遗漏 CancellationToken 参数;不从 API 返回可变集合;不为预期业务错误抛异常;不重复分配大数组。
参考文件与资源
技能附带参考文件:value-objects-and-patterns.md(值对象与模式匹配完整示例)、performance-and-api-design.md(Span/Memory 示例与 API 设计原则)、composition-and-error-handling.md(组合优于继承、Result 类型、测试模式)、anti-patterns-and-reflection.md(避免反射与常见反模式)。
附加资源链接包括 C# 语言规范、模式匹配、Span 与 Memory、Async 最佳实践、.NET 性能建议等微软官方文档。
限制
关于该技能的安装方式、收费模式、适用平台与版本要求等事实,资料中暂未提供。