值不能為 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 更為合適呢?至少排除錯誤時更容易,拙見

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM