值不能為 null。 引數名 source

2022-02-25 01:56:50 字數 1041 閱讀 2634

今天除錯程式總是報乙個異常:

異常詳細資訊:system.argumentnullexception: 值不能為 null。

引數名: source

通過斷點發現是這段**錯誤,發生這個異常通常是方法中某個引數為空了,而我的方法中沒有乙個名為source的引數啊,後來發現是 processors 為 null ,呼叫 select 方法當然會出錯。

processors =taskwfservice.identifynextworkflowprocessors(currentuserid, currenttaskworkflow.reporttaskid);

var taskprocessorlist = processors.select(item => new taskworkflowprocessor ).tolist();

但是根據我們平時的經驗,乙個為null的物件,呼叫它的方法時,應該丟擲 nullreferenceexception 未將物件設定到物件的例項 異常啊?比如我們呼叫 tostring() 方法

var thetype = processors.tostring(); //

thrown a nullreferenceexception

其實問題那就出在 select() 方法,在 select 上按 f12 檢視定義

public

static ienumerableselect(this ienumerablesource, funcselector);

這是 system.linq 下的擴充套件方法(.net 3.5之前是沒有的),除了 select 還有很多平時常見的,比如 where, any, orderby, selectmany, take 等

這個方法內部判斷傳入的引數 source 為 null,就丟擲乙個 argumentnullexception。

我覺得如果擴充套件方法中的 this 引數為 null,是否丟擲乙個 nullreferenceexception 更為合適呢?至少排除錯誤時更容易,拙見

C 值型別為什麼不能為空null

參考部落格 shyleoking 首先我們知道值型別儲存在棧 stack 中,而引用型別儲存在堆 heap 中,棧的工作方式是先進後出,會保證先分配記憶體的變數後釋放。這樣就保證了棧中先進後出的規則不與變數的生命週期起衝突。在c 中,對變數的宣告要求是先定義後使用,變數的生命週期是從其定義開始直到程...

i 不能為左值的原因

1 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value 我們也可認為右值的意思是被讀取的值 r...

SQL主鍵不能為NULL,消除重複資料問題

今天在創表的時候,打算把幾個字段設定為主鍵,但是實際情況是有些欄位為null,搜尋之後發現主鍵不能為null,於是研究發現要用unique才能為null。於是我順便講一下一些關於資料庫重複資料的知識點。主鍵關鍵字是primary key,在創表的時候可以設定乙個主鍵,主鍵不能為null,如下 cre...