⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

代数数据类型:用泛型记录构建类型安全的变体(Discriminated Union)

通过嵌套泛型记录和静态工厂方法,在 C# 中实现功能完整的代数数据类型,支持模式匹配与穷举检查。 · 难度:入门 · +10XP

代数数据类型

C# 缺少内置的 discriminated union,但可借助泛型记录和私有构造函数模拟。定义一个抽象基类 Result,然后派生出 Success 和 Failure 记录,并提供静态工厂方法。通过 switch 表达式配合 when 子句实现模式匹配。虽然不如 F# 的 DU 简洁,但可达到几乎相同的类型安全性——编译器可检查分支是否覆盖所有子类型。本教程还将展示如何添加 Match 高阶函数来实现穷举检查。

public abstract record Result<T>
{
  private Result() { }
  public sealed record Success(T Value) : Result<T>;
  public sealed record Failure(string Error) : Result<T>;

public static Result<T> Ok(T v) => new Success(v); public static Result<T> Fail(string e) => new Failure(e); }

var result = Result<int>.Ok(42); string msg = result switch { Result<int>.Success s => $"Value: {s.Value}", Result<int>.Failure f => $"Error: {f.Error}", _ => throw new InvalidOperationException() };

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 148 篇
0 完成
🔥 0