2012-12-13 106 views
1

我想將單獨的類型化數據集數據表傳遞給相同的方法。數據表類似,但不同。該方法在數據表上執行相同的功能。根據數據表類型的不同,本質上不需要複製方法和更改參數類型,有沒有辦法按照爲數據表創建自定義接口的方式進行操作,這樣我就可以使用接口參數的單個方法類型?C#強類型數據集 - 將不同的數據表傳遞給相同的方法(接口?)

我目前有:

private PassdownDataset.SalesOrdersForManagerDataTable datatable1; 
private PassdownDataset.SalesOrdersDataTable datatable2; 

public SomePublicMethod() 
{ 
PopulateDepartmentName(datatable1); 
PopulateDepartmentName(datatable2); 
} 

private void PopulateDepartmentName(PassdownDataset.SalesOrdersForManagerDataTable dt) 
{ 
//(operations performed on datatable) 
} 

private void PopulateDepartmentName(PassdownDataset.SalesOrdersDataTable dt) 
{ 
//(operations performed on datatable) 
} 

我想什麼有:

private PassdownDataset.SalesOrdersForManagerDataTable datatable1; 
private PassdownDataset.SalesOrdersDataTable datatable2; 

public SomePublicMethod() 
{ 
PopulateDepartmentName(datatable1); 
PopulateDepartmentName(datatable2); 
} 

private void PopulateDepartmentName(
       PassdownDataset.CommonInterfaceForBothDataTables dt) 
{ 
//(operations performed on datatable) 
} 
+0

您可以使用相同的DataTable(只是不同的DataRows),或者要求'DataTable'或'IEnumerable '作爲輸入而不是強類型的DataTables,或者您是否真的需要類型化的DataTable功能? –

+0

你可以使用協變接口將它們一起破解。 – SLaks

+0

唯一的問題是鍵入的DataRows也不同,不幸的是我需要使用鍵入的數據表功能 – spurro

回答

0

你可以解決這個使用繼承,我敢肯定。但這可能會變得尷尬和被迫。

我發現在C#4中添加的動態特性對於這樣的事情是相當不錯的。主要的缺點是你失去了靜態類型和重構友好性。如果你對動態的使用是非常本地化的(比如包含在一個輔助方法中),我認爲這是可以的。

作爲一個例子,假設所有的數據庫實體都有一個CreateDateTime字段,並且你需要幫助者方法來初始化它。這是一個很好的動態用例。另一種方法是讓所有實體繼承一個接口。

相關問題