2012-12-13 25 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字段,并且你需要帮助者方法来初始化它。这是一个很好的动态用例。另一种方法是让所有实体继承一个接口。

相关问题