OneOf<T1,…,Tn>清新
  FbTHpPhzgKBC 2023年11月02日 75 0

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<T1,…,Tn>清新_微信公众号


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
FbTHpPhzgKBC
作者其他文章 更多