1

我想知道在 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>();
}
4

1 回答 1

2

我应该使用“if”语句或“try/catch”块,例如:

一般来说,我希望明确null检查null返回是否是应用程序正常操作的一部分。

在您的情况下,这可能是正确的,因为查找产品似乎是一项很可能失败的操作,因为产品可能不存在。

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

于 2013-05-24T16:06:23.440 回答