که امکان داشتن یک چنین کدهایی را با چندین نوع خروجی، میسر میکند:
public class Person { public (string or Address) Address { get; set; } }
چه کاربردی داره؟
این متد را درنظر بگیرید:
public Receipt PlaceOrder(Order order) { var product = _products.SingleOrDefault(p => p.ProductId == order.ProductId); if (product is null) { throw new Exception("Product doesn't exist"); } if (product.Cost > order.Payment) { throw new Exception("Insufficient funds"); } var receipt = new Receipt(++_receiptId, order.Payment); _receipts.Add(receipt); return receipt; }
برای استفاده کننده دقیقا مشخص نیست که این متد ممکن است چندین استثناء را هم صادر کند. با وجود type unions، میتوان مقصود واضحتری را ارائه داد:
public (Receipt or PlaceOrderError) PlaceOrder(Order order)
هرچند در این لحظه، شبیه به اینکار را با استفاده از کتابخانهی OneOf هم انجام میدهند و ... TypeScript هم که در اساس توسط قسمت مهمی از تیم #C طراحی شده، مدتهاست که به همراه چنین قابلیتی هست.