首页 > 其他 > 详细

局部函数和委托

时间:2021-02-05 09:43:22      阅读:27      评论:0      收藏:0      [点我收藏+]

1》局部函数存于堆栈,委托存于堆

2》局部函数在IL只是单纯调用,Lambda会被转成委托和类

3》局部函数在IL中用call调用,不需要校验实例是否存在,而委托在IL中用callvert调用,是需要校验是否有实例存在

4》使用迭代器时,异常的不会立即返回,而局部函数则会

例如:

1、这个在if (lstOrderDetails == null) throw new ArgumentNullException();不会返回异常,只会在foreach (var order in lstOrderDetails)触发异常

private static IEnumerable<string> GetItemSellingPice(List<OrderDetails> lstOrderDetails)
{
    if (lstOrderDetails == null) throw new ArgumentNullException();

    foreach (var order in lstOrderDetails)
    {
        yield return ($"Item Name:{order.ItemName}, Selling Price:{order.SellingPrice}");
    }
}

2、这个则会在if (lstOrderDetails == null) throw new ArgumentNullException();触发异常

private static IEnumerable<string> GetItemSellingPice(List<OrderDetails> lstOrderDetails)
{
    if (lstOrderDetails == null) throw new ArgumentNullException();

    return GetItemPrice();

    IEnumerable<string> GetItemPrice()
    {
        foreach (var order in lstOrderDetails)
        {
            yield return ($"Item Name:{order.ItemName}, Selling Price:{order.SellingPrice}");
        }
    }
}

局部函数和委托

原文:https://www.cnblogs.com/caihuaxing/p/14375898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!