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<>,把这种继承“解耦”了。
想要更快更方便的了解相关知识,可以关注微信公众号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示