值不能为 null。 参数名: source
2016-01-01 23:58
405 查看
今天调试程序总是报一个异常:
值不能为 null。
异常详细信息: System.ArgumentNullException: 值不能为 null。
参数名: source
通过断点发现是这段代码错误,发生这个异常通常是方法中某个参数为空了,而我的方法中没有一个名为source的参数啊,后来发现是 processors 为 NULL ,调用 Select 方法当然会出错。
但是根据我们平时的经验,一个为NULL的对象,调用它的方法时,应该抛出 NullReferenceException 未将对象设置到对象的实例 异常啊?比如我们调用 ToString() 方法
其实问题那就出在 Select() 方法,在 Select 上按 F12 查看定义
这是 System.Linq 下的扩展方法(.net 3.5之前是没有的),除了 Select 还有很多平时常见的,比如 Where, Any, OrderBy, SelectMany, Take 等
这个方法内部判断传入的参数 source 为 NULL,就抛出一个 ArgumentNullException。
我觉得如果扩展方法中的 this 参数为 NULL,是否抛出一个 NullReferenceException 更为合适呢?至少排除错误时更容易,拙见
值不能为 null。
参数名: source
异常详细信息: System.ArgumentNullException: 值不能为 null。参数名: source
通过断点发现是这段代码错误,发生这个异常通常是方法中某个参数为空了,而我的方法中没有一个名为source的参数啊,后来发现是 processors 为 NULL ,调用 Select 方法当然会出错。
processors = taskWfService.IdentifyNextWorkflowProcessors(CurrentUserId, currentTaskWorkflow.ReportTaskId); var taskProcessorList = processors.Select(item => new TaskWorkflowProcessor { Processor = item }).ToList();
但是根据我们平时的经验,一个为NULL的对象,调用它的方法时,应该抛出 NullReferenceException 未将对象设置到对象的实例 异常啊?比如我们调用 ToString() 方法
var theType = processors.ToString(); //Thrown a NullReferenceException
其实问题那就出在 Select() 方法,在 Select 上按 F12 查看定义
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);
这是 System.Linq 下的扩展方法(.net 3.5之前是没有的),除了 Select 还有很多平时常见的,比如 Where, Any, OrderBy, SelectMany, Take 等
这个方法内部判断传入的参数 source 为 NULL,就抛出一个 ArgumentNullException。
我觉得如果扩展方法中的 this 参数为 NULL,是否抛出一个 NullReferenceException 更为合适呢?至少排除错误时更容易,拙见
相关文章推荐
- C语言-字符串
- Manacher算法
- 1.1
- 【android学习2】:Eclipse中HttpServlet类找不到
- U盘安装Debian,提示缺少无线网卡驱动
- Lua脚本
- 使用converView/viewHolder优化ListView
- python tkinter 学习笔记(1)
- 2015年的总结
- 2016年的规划
- Stick
- codeforces 336 Div.2 B. Hamming Distance Sum
- c++实现回调函数及使用方法
- 如何设置minSdkVersion和targetSdkVersion
- Cocoa Touch事件处理流程-响应者链
- java16.语言进阶------本地文件操作---文件的简单读写
- 将博客搬至CSDN
- 使用异或运算实现两数交换
- 事件处理步骤
- mysql技能点