我有一個帶有簽名的函式,因此:
public void LoadLookups(DataTable[] tables)
當我這樣稱呼它時它作業正常:
DataTable[] tables = { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients };
timeTrackDataSet.LoadLookups(tables);
但我無法弄清楚如何僅用一行呼叫該方法。我試過了:
timeTrackDataSet.LoadLookups({ timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients });
和
timeTrackDataSet.LoadLookups(DataTable[] = { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients });
但沒有任何編譯,錯誤訊息也沒有讓我到那里。
uj5u.com熱心網友回復:
選項1
您可以在線創建一個陣列并立即傳遞它:
timeTrackDataSet.LoadLookups(new[] { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients });
選項#2
或者,如果您可以更改原始方法的簽名,則可以添加params:
public void LoadLookups(params DataTable[] tables)
在這種情況下,您要么傳遞陣列,要么傳遞逗號分隔的引數:
DataTable[] tables = { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients };
timeTrackDataSet.LoadLookups(tables);
timeTrackDataSet.LoadLookups(timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients);
uj5u.com熱心網友回復:
像這樣:
LoadLookups(new DataTable[] { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients });
在我看來,這timeTrackDataSet是一個強型別資料集,即在您的專案中,您有一個設計器和一個 TimeTrackDataset,您可以雙擊它并看到一個類似于資料庫表設計器的 GUI。因此,您提到的那些道具(用戶、任務型別等)是從 DataTable 派生的——它們是一種特定的型別,但它們有一個共同的父級
當你這樣做時:
DataTable[] tables = { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients };
編譯器可以知道“用戶想要創建一個 DataTable 陣列,并且看到它與這三個東西都繼承自(因此可分配給)DataTable,所以我會允許它”
它會為您展開代碼,例如:
DataTable[] dt = new DataTable[3];
dt[0] = timeTrackDataSet.Users;
dt[1] = ...
但是,編譯器無法應對無法確定型別的嘗試:
//not valid syntax
LoadLookups({ timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients });
//no best type for implicit typed array -
//because the members are not the same type and there is no conversion
LoadLookups(new [] { timeTrackDataSet.Users, timeTrackDataSet.TaskTypes, timeTrackDataSet.Clients });
所以你必須通過最低限度地指定型別來幫助它
那(就在上面)說,如果你真的自己派生了 DataSet 并給你的子類 3 道具用戶、任務型別和客戶端真的都回傳了資料表,那么你確實可以只做LoadLookups(new [] {.
腳注2;如果用戶是 DataTable 型別,那么即使派生了其他條目,它也可以作業;來自陣列初始值設定項的隱式型別查看 {} 中第一個元素的型別,如果所有其他元素都可以隱式轉換為第一個元素的型別,那么創建也會成功
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/401746.html
標籤:C#
