c# 15可用union声明有限的返回类型集合,再通过switch表达式分别处理每种结果。适合“查到对象或返回未找到信息”等明确分支;下面示例面向.net 11 sdk和net11.0项目,不需要把互不相关的结果类型强行放进同一基类。
创建示例项目
dotnet new console -n UnionDemo -f net11.0 cd UnionDemo
确认当前目录使用.NET 11 SDK。将Program.cs替换为以下示例:两个record表示实际数据和未找到结果,union只允许这两种类型进入返回值。

微软C# 15文档中的联合类型声明与分支说明
声明联合类型并处理返回结果
ProductLookup result = FindProduct(42);
string message = result switch
{
Product product => $"Found {product.Name}",
ProductNotFound missing => $"No product with ID {missing.Id}",
};
Console.WriteLine(message);
static ProductLookup FindProduct(int id)
{
if (id == 42) return new Product(id, "Keyboard");
return new ProductNotFound(id);
}
public sealed record Product(int Id, string Name);
public sealed record ProductNotFound(int Id);
public union ProductLookup(Product, ProductNotFound);dotnet run
id为42时返回Product,其他值返回ProductNotFound。调用端只围绕这两个已声明的case类型处理,不需要先把返回值降为object再猜测类型;把数字改成其他值可观察另一个明确分支。

微软对C#联合类型及穷尽匹配机制的解释
保持联合集合与分支一致
union提供从各case类型到联合类型的隐式转换,switch表达式可进行穷尽性检查。以后增加新的case类型,应同步处理相应分支。联合类型表达的是有限类型集合,不会自动把一次失败转换为异常,也不代替业务校验和异常处理。


















