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<>,把这种继承“解耦”了。
想要更快更方便的了解相关知识,可以关注微信公众号
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524