有人可以解释一下为什么我在以下方法的 null-coalescing 上遇到错误:
private readonly Product[] products = new Product[];
[HttpGet("{id}")]
public ActionResult<Product> GetById(int id)
{
var product = products.FirstOrDefault(p => p.Id == id);
if (product == null)
return NotFound(); // No errors here
return product; // No errors here
//I want to replace the above code with this single line
return products.FirstOrDefault(p => p.Id == id) ?? NotFound(); // Getting an error here: Operator '??' cannot be applied to operands of type 'Product' and 'NotFoundResult'
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
我不明白的是为什么第一个返回不需要任何演员就可以工作,而第二个单行空合并不起作用!
我的目标是 ASP.NET Core 2.1
编辑:感谢@Hasan和@dcastro的解释,但我不建议在这里使用空合并,因为在NotFound()
转换后不会返回正确的错误代码!
return (ActionResult<Product>)products?.FirstOrDefault(p => p.Id == id) ?? NotFound();