在访问属性或调用方法之前检查空结果

本文关键字:检查 结果 方法 访问 属性 调用 | 更新日期: 2023-09-27 18:15:27

我想知道在访问c# Linq或lambda表达式中的属性或调用方法之前是否有更好的方法或一般规则来检查null结果。提前谢谢。

在我的理解中,为了避免像"对象引用未设置为对象的实例"或"在访问CSharp属性或调用方法之前从Lambda结果检查null"这样的异常,我应该使用"if"语句,或"try/catch"块,如:

 var product1 = _myProductRepository.FindOne(p => p.Id == -20301); 
//1. use "if" statement to let code flow continue
if(product1 != null) // to prevent exception "Object reference not set to an instance of an object."
{
      int id1 = sh1.Id; // note: accessing property "Id" is safe here
      Console.WriteLine("Product Id: {0}", id1);
}

//2. use "try/catch" block to let code flow continue
var product2 = _myProductRepository.FindOne(123);
var possibleItems  = product2.Orders.Where(x => x.Id == -1);
List<Order> myOrderList = null;
try
{
       myOrderList = possibleItems.ToList(); // note: ToList() method call is safe here
}
catch
{
       myOrderList = new List<Order>();
}

在访问属性或调用方法之前检查空结果

我应该使用"if"语句,或者"try/catch"语句块,如:

一般来说,如果null返回是应用程序正常操作的一部分,我更喜欢显式的null检查。

在你的情况下,这很可能是真的,因为寻找产品看起来像一个很可能失败的操作,因为产品可能不存在。

也就是说,如果ID是一个已知的元素,并且确实应该始终在DB中,那么null将不是预期的结果。在这种情况下,FindOne方法确实不应该返回null实例,这确实是一种例外情况,那么可能首选异常处理。