我怎么知道lambda表达式何时为空

Mic*_*elD 5 c# null lambda exception

我需要以编程方式检查lambda表达式中的嵌套属性/函数结果是否为null.问题是null可以在任何嵌套的子属性中.

例.功能是:

 public static bool HasNull<T, Y>(this T someType, Expression<Func<T, Y>> input)
    {
      //Determine if expression has a null property
    }  
Run Code Online (Sandbox Code Playgroud)

使用:

person.HasNull(d=>d.addressdetails.Street)
person.HasNull(d=>d.addressdetails[1].Street)
person.HasNull(d=>d.addressdetails.FirstOrDefault().Street)
person.HasNull(d=>d.InvoiceList.FirstOrDefault().Product.Name)
Run Code Online (Sandbox Code Playgroud)

在任何示例中,addressdetails或street,或者invoicelist或者产品或名称可以为null.如果我尝试调用该函数并且某些嵌套属性为null,则代码将抛出异常.

重要提示:我不想为此使用try catch,因为这对于调试性能来说是灾难性的.

这种方法的原因是快速检查值,而我不想忘记任何空值,因此导致异常.这对于报告解决方案和网格非常方便,其中报表上的null可以显示为空并且没有进一步的业务规则.

相关帖子:当它被抛出并被捕获时,不要停止调试器

Jon*_*eet 1

您必须拆开表达式并依次计算每个位,当得到空结果时停止。无论如何,这并不是不可能的,但这将是相当大量的工作。

您确定这比在代码中放置显式空保护要少一些工作吗?