lambda表达式中的空指针问题

今天看demo环境阿里云的日志,发现有报空指针,既然这样那就解决一下呗.

报错代码如下.

很显然 shipment为空

调用处的代码如下

突然发现气氛陷入了尴尬的沉默.如果说shipments为空的话,lambda表达式是不会进行的.那么这个空指针是从哪里来的呢?

再跟一下.

调用处在这里.

那么我们可以猜一下,应该是shipments本身不为空,但是里面的元素为null.

试了一下,果然OK了.

原文地址:https://www.cnblogs.com/tyoutetu/p/11498498.html

时间: 2024-11-14 11:39:12

lambda表达式中的空指针问题的相关文章

boost在lambda表达式中调用占位符参数的成员函数的方法

boost中提供了lambda表达式的用法,但是lambda表达式的功能还不是很强大,在其中只能对lambda的占位符参数_1等使用最基本的操作符,如+-*/,可是很多时候如果传入的占位符参数是一个对象指针的话,我们可能想要调用这个类的成员函数. 我在开发中遇到了这个问题,需要在stl的算法中传入一个函数来调用对象的比较函数,因为感觉这样太麻烦,还需要重新定义一个函数,所以想起了lambda表达式,c++11的lambda表达式我倒是没试过,可是受项目开发环境所限,只能选择boost.但是我用的

在Lambda表达式中使用循环变量

在C#5.0之前的版本中,如果在foreach循环中的lambda使用循环变量,那么你会发现一些意想不到的现象,例子如下: var integers = new List<int> { 1, 2, 3, 4 }; var actions = new List<Action>(); foreach (var integer in integers) { actions.Add(() => Console.WriteLine(integer)); } actions.ForEac

Lambda表达式中的表达式lambda和语句lambda区别

Lambda表达式可分为表达式lambda和语句lambda 表达式lambda:表达式位于 => 运算符右侧的lambda表达式称为表达式lambda (input parameters) => expression //表达式lambda 例如 (x, y) => x == y 语句lambda:=> 运算符右侧是一个语句块,语句包含在大括号中 (input parameters) => {statement;} //语句lambda 例如: (x, y) => {

(转) Lambda表达式中的表达式lambda和语句lambda区别

Lambda表达式可分为表达式lambda和语句lambda 表达式lambda:表达式位于 => 运算符右侧的lambda表达式称为表达式lambda (input parameters) => expression //表达式lambda 例如 (x, y) => x == y 语句lambda:=> 运算符右侧是一个语句块,语句包含在大括号中 (input parameters) => {statement;} //语句lambda 例如: (x, y) => {

lambda表达式中的Select和Where的区别?

Select()操作符:可以将序列中的每个元素投影到新表中,即取出哪些属性(字段),其实和sql中的select差不多的意思. Where()操作符:是用于对序列中的元素进行过滤和筛选,类似sql中是where字句 例如: 注意:Select()对每一条数据进行投影到一张新的表中 new {p.Name}  使用了匿名类,该匿名类中只包含原表中的Name字段,相当与取Name字段,和sql中的select查询一样 总结:Where()操作符是用于过滤用的,和sql中的where字句一样. 那如果

Lambda表达式中使用正则表达式

某语句如果不用正则表达式: string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" }; IEnumerable<string> query = names.Select(n => n.Replace("a", "").Replace("e", "").

.NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式

开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式.为了方便码农们,.Net基类库针对实际开发中最常用的情形提供了几个预定义好的委托,这些委托可以直接使用,无需再重头定义一个自己的委托类型.预定义委托在.Net基类库中使用的比较广泛,比如在Lambda表达式和并行计算中都大量地使用,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Impleme

Android Stutio中使用java8的Lambda表达式

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51532028 本文出自:[openXu的博客] 目录: 为什么要使用Lambda表达式 让Android Stutio支持Lambda 函数式接口Functional interfaces Lambda表达式的目标类型以及匹配 Lambda表达式语法 1 基础语法和语法简化 2 Lambda表达式的词法作用域 3 变量捕获 ??Java 8的一个大亮点是引入Lambda表达式,使用它设计的

在Linq to sql 和 Entity framework 中使用lambda表达式实现left join

我们知道lambda表达式在Linq to sql 和 Entity framework 中使用join函数可以实现inner join,那么怎么才能在lambda表达式中实现left join呢?秘诀就是在join后面加上一个函数DefaultIfEmpty函数,实际上这个函数在linq中貌似也只有将inner join转换为left join的作用,示例如下 var joinResult = DB.Table1s.Join(DB.Table2s, a => a.id, b => b.id,