- 當函數參數裏面有out或者ref關鍵字時,不能將foreach 對象及含有索引器的變量傳遞進去,無法改變其值,如下
for (int n = 0; n < listSelChkCond.Count; n++)
{
//ref 和 out 不能直接傳帶有索引器或者foreach成員的值
CommGX.CCommGXDB.GetFieldType(entExInfo, ref listSelChkCond[n]);
}
- 改成下列方法就可以,先把值賦給一個結構,然後傳參,再傳回來:
for (int n = 0; n < listSelChkCond.Count; n++)
{
//先將list成員賦值給一個獨立的變量
CommDB.CCommStruct.CheckCondition cc = listSelChkCond[n];
//ref傳入該變量
CommGX.CCommGXDB.GetFieldType(entExInfo, ref cc);
//將改變值的變量回賦給list集合對應的成員
listSelChkCond[n] = cc;
}
- 當然也可以使用linq語句,select可以傳參:
listSelChkCond = listSelChkCond.Select(p => CommGX.CCommGXDB.GetFieldType(entExInfo,ref p); return p; }).ToList();
使用All的話就不行,不能傳值回來:
listSelChkCond.ALL(p => { CommGX.CCommGXDB.GetFieldType(entExInfo,ref p); return p; }).ToList();