zoukankan      html  css  js  c++  java
  • 值不能为 null。 参数名: source

    今天调试程序总是报一个异常:

    值不能为 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 更为合适呢?至少排除错误时更容易,拙见

  • 相关阅读:
    简单排序算法
    线程池第二篇:线程池相关类
    枚举的使用
    线程池第一篇:线程池相关接口
    mysql InnoDB引擎与MyISAM引擎区别及索引原理
    待重写
    mysql登录命令
    浅拷贝、深拷贝
    grpc:What is gRPC
    protocol buffer第一篇:语法介绍
  • 原文地址:https://www.cnblogs.com/felixnet/p/5093998.html
Copyright © 2011-2022 走看看