微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据.Net 中的条件将列表分配给变量

如何解决如何根据.Net 中的条件将列表分配给变量

我必须发布客户详细信息(列出硬编码仅供参考),而且我想发布一个具有唯一 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);
    }
}
,

一个方法每次都需要返回一些东西(return null也可以),所以当返回在if语句中时,它可能不会在所有循环迭代中输入那个if语句,因此不会return 任何东西,因此您需要在 return 语句中或 else 语句之外使用另一个 if

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。