linq 在C#中的Try-Catch区块内传回布林值

yeotifhr  于 2022-12-06  发布在  C#
关注(0)|答案(2)|浏览(149)
public bool RemoveProduct(int id)
        {
            // code to remove product by the id provided as parameter
            try 
            {
                var prod = productlist.Where(s => s.ProductId == id).FirstOrDefault();
                productlist.Remove(prod);
            }
            catch (Exception) 
            {
                return false;
            }
            return true;
            

        }

我尝试使用参数Id调用函数RemoveProduct(id),但参数Id不在productlist中,它应该返回false,但无论如何它总是返回true。如何解决此问题,并在给定id的产品不在列表中时返回false?

moiiocjp

moiiocjp1#

这是因为FirstOrDefault()Remove()在列表中找不到值时都不会引发异常。
如果没有找到您的项目(prod == null),则可以返回false。
或者只返回Remove()的结果(尽管如果您有一个null项,并且没有找到具有所提供id的项,您最终会删除它并返回true)
就像现在一样,方法返回false的唯一情况是列表为空,从而导致NullReferenceException

pgvzfuti

pgvzfuti2#

如果你真的想要一个真/假的返回,我会做这样的事情。

public bool RemoveProduct(int id)
{
    // code to remove product by the id provided as parameter
    var prod = productlist.Where(s => s.ProductId == id).FirstOrDefault();
 
    if (prod == null) return false;        

    productlist.Remove(prod);

    return true;
}

相关问题