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

How to Assign List to a variable based on a condition in .Net

我必须 POST 客户详细信息(列出硬编码仅供参考)并且我还想 POST 具有唯一 ID 的列表。

我已经编写了一个简单的 For 循环,仅当我的详细信息 POSTED 具有唯一 ID 时,它才会将客户详细信息添加到列表中,但我在这里收到一个错误,提示“并非所有代码路径 returns 一个值”。请告诉我是否还有其他简单的方法。

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);
            }
        }
    }
}

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

您收到 “并非所有代码路径 return 都是一个值” 错误,因为该方法可能在控制流根本没有进入 if 语句的情况下结束。在循环结束后你需要 return 一些东西。例如,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);
    }
}