عنوان:

‫پیشنهاد رسمی اضافه شدن type unions به زبان #C


نویسنده: وحید نصیری
تاریخ: ۱۴۰۳/۰۵/۰۸ ۰۷:۱۰
آدرس: www.dntips.ir

که امکان داشتن یک چنین کدهایی را با چندین نوع خروجی، میسر می‌کند:

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 طراحی شده، مدت‌هاست که به همراه چنین قابلیتی هست.