首页 > 解决方案 > 如何根据.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);
            }
        }
    }
}

标签: c#asp.netasp.net-web-apic#-4.0

解决方案


您会收到“并非所有代码路径都返回值”错误,因为该方法可能会在没有控制流进入 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);
    }
}

推荐阅读