代数数据类型:用泛型记录构建类型安全的变体(Discriminated Union)
通过嵌套泛型记录和静态工厂方法,在 C# 中实现功能完整的代数数据类型,支持模式匹配与穷举检查。 · 难度:入门 · +10XP
代数数据类型
C# 缺少内置的 discriminated union,但可借助泛型记录和私有构造函数模拟。定义一个抽象基类 Result
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()
};