OneOf<T1,…,Tn>清新

OneOf——其中之一,这是一个泛型类,意思就是这里泛型中的任何一个类都可以,还是看代码吧。

引入包

install-package OneOf

实现一个产品查询,有三种情况,查询到返回;查询不到;查询出错。

    [ApiController]
    [Route("[controller]")]
    public class HomeController : ControllerBase
    {
        private readonly ILogger<HomeController> _logger;


        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }


        [HttpGet("/product/{id}")]
        public IActionResult Get(int id)
        {
            OneOf<Product, NotFound, SystemError> result = GetProject(id);
            return result.Match<IActionResult>(
                product =>
                {
                    _logger.LogInformation("查询成功");
                    return new JsonResult(product);
                },
                notfound =>
                {
                    _logger.LogInformation("没有查到");
                    return new NotFoundResult();
                },
                systemerror =>
                {
                    _logger.LogError("查询成败");
                    return new StatusCodeResult(500);
                });
        }
        /// <summary>
        /// 按ID查询产品,有三种返回类型,找到产品返回;按ID查询不到;查询过程发生错误
        /// </summary>
        /// <param name="id"></param>
        public OneOf<Product, NotFound, SystemError> GetProject(int id)
        {
            try
            {
                //这里实现真实查库
                var num = RandomNumberGenerator.GetInt32(1, 10);
                if (num % 3 == 0)
                {
                    return new NotFound();
                }
                else
                {
                    return new Product() { ID = id, Name = "手机" };
                }
            }
            catch (Exception exc)
            {
                _logger.LogCritical(exc, exc.Message);
                return new SystemError();
            }
        }
    }


    public class NotFound
    {
    }
    public class SystemError
    {
    }
    public class Product
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

可以看到,NotFound,SystemError,Product三个类是没有任何关系的,是独立的类,这里通过OneOf<>,来实现返回任何类型都可以,按照OOP的思路,需要三个类继承一个父类来实现,现在用OneOf<>,把这种继承“解耦”了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值