ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OneOf<T1,…,Tn>清新

2022-02-04 09:32:25  阅读:91  来源: 互联网

标签:OneOf return 查询 public new logger 清新


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<>,把这种继承“解耦”了。

    想要更快更方便的了解相关知识,可以关注微信公众号 

 

 

 

标签:OneOf,return,查询,public,new,logger,清新
来源: https://www.cnblogs.com/axzxs2001/p/15862468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有