c# - 如何根据.Net中的条件将列表分配给变量
问题描述
我必须发布客户详细信息(仅针对 reff 列出硬代码),并且我想发布具有唯一 ID 的列表。
我编写了一个简单的 For 循环,仅当我要发布的详细信息具有唯一 ID 时才将客户详细信息添加到列表中,但我在此处收到错误消息,提示“并非所有代码路径都返回值”。请告诉我是否有另一种简单的方法。
public class CustomerController : ControllerBase
{
List<Customer> customers = new List<Customer>();
public CustomerController()
{
customers.Add(new Customer { Id = "1", FirstName = "Batman", LastName = "Gotham", DOB = "17/04/1978", SSN = "1000000000" });
customers.Add(new Customer { Id = "2", FirstName = "Superman", LastName = "Krypton", DOB = "18/04/1938", SSN = "2000000000" });
customers.Add(new Customer { Id = "3", FirstName = "Wonder Woman", LastName = "Themyscira", DOB = "22/03/1976", SSN = "3000000000" });
}
[HttpPost]
public IActionResult Post([FromBody]Customer customer)
{
int n = customers.Count;
for (int i = 0; i < n; i++)
{
if (customer.Id != customers[i].Id)
{
customers.Add(customer);
string msg = "done";
return Ok(msg);
}
}
}
}
解决方案
您会收到“并非所有代码路径都返回值”错误,因为该方法可能会在没有控制流进入 if 语句的情况下结束。你需要在循环结束后返回一些东西。例如,return BadRequest(msg);
但无论如何,你的逻辑是有缺陷的。一旦您在列表中找到不同的 Id,您就添加该客户,但在列表的下方可能有一个具有相同 Id 的客户。
此外,您不必自己实现对 Id 的搜索。只需使用现有的Enumerable.Any Method。
[HttpPost]
public IActionResult Post([FromBody] Customer customer)
{
if (customers.Any(c => c.Id == customer.Id)) {
string msg = "duplicate";
return BadRequest(msg);
} else {
string msg = "done";
customers.Add(customer);
return Ok(msg);
}
}
推荐阅读
- google-maps - 你如何在 Uno WASM 中实现谷歌地图
- visual-studio-code - 在 VSCode-remote 上,为什么即使应用程序关闭,python jedi 语言服务器扩展也会占用过多的 RAM?
- python - 有什么方法可以在我的电脑休眠或关机之前自动执行我的 python 程序?
- node.js - 如何从 docker 容器中的 puppeteer 实例录制带音频的视频
- django-rest-framework - DRF 和 Oauth2:创建资源和授权服务器
- c++ - 为什么 std::filesystem::file_time_type 中的 time_since_epoch() 为负数?
- python - 在 pandas df 中对前 N 进行排序并将“其他”分组
- c# - 这是使用 Dapper 进行映射的有效方式吗?
- vue.js - TypeError:无法读取未定义商店调度 vuex 的属性“令牌”
- dax - PowerBI - 按多个条件查找