我所拥有的是100%的功能,但是我想知道是否有一种更干净、更高效或更高可读性的方法来做到这一点,或者一个一个地检查是否可行。
If XMLDataSet.Tables.Contains(CabinetTable.TableName) Then
XMLDataSet.Tables.Remove(CabinetTable.TableName)
XMLDataSet.Tables.Add(CabinetTable)
Else
XMLDataSet.Tables.Add(CabinetTable)
End If
If XMLDataSet.Tables.Contains(DocTypeTable.TableName) Then
XMLDataSet.Tables.Remove(DocTypeTable.TableName)
XMLDataSet.Tables.Add(DocTypeTable)
Else
XMLDataSet.Tables.Add(DocTypeTable)
End If
If XMLDataSet.Tables.Contains(IndexTable.TableName) Then
XMLDataSet.Tables.Remove(IndexTable.TableName)
XMLDataSet.Tables.Add(IndexTable)
Else
XMLDataSet.Tables.Add(IndexTable)
End If
If XMLDataSet.Tables.Contains(CabinetToTypeTable.TableName) Then
XMLDataSet.Tables.Remove(CabinetToTypeTable.TableName)
XMLDataSet.Tables.Add(CabinetToTypeTable)
Else
XMLDataSet.Tables.Add(CabinetToTypeTable)
End If
If XMLDataSet.Tables.Contains(TypeToIndexTable.TableName) Then
XMLDataSet.Tables.Remove(TypeToIndexTable.TableName)
XMLDataSet.Tables.Add(TypeToIndexTable)
Else
XMLDataSet.Tables.Add(TypeToIndexTable)
End If我想我可以做个潜艇来做这件事,比如:
Private Sub addRemoveDataTable(ByRef ds As DataSet, ByVal dt As DataTable)
If ds.Tables.Contains(dt.TableName) Then
ds.Tables.Remove(dt.TableName)
End If
ds.Tables.Add(dt)
End Sub但是,对于每一个DataTable,我仍然需要调用它,所以我认为它没有更高的效率。
编辑:
我完全忘记了在数据表中使用参数数组.
Private Sub addRemoveDataTable(ByRef ds As DataSet, ByVal ParamArray dTable() As DataTable)
For Each dt As DataTable In dTable
If ds.Tables.Contains(dt.TableName) Then
ds.Tables.Remove(dt.TableName)
End If
ds.Tables.Add(dt)
Next
End Sub然而,For循环的每一次迭代都只是调用了第一个选项中的一个集合,所以我仍然看不到效率有多大的提高。但是这个选项更容易理解,也更灵活一些。
发布于 2014-06-13 19:53:37
根据您对扩展方法的感受,可以将扩展方法添加到DataSet中。
Imports System.Runtime.CompilerServices
Module ExtensionMethods
<Extension> Public Sub Replace(ByVal dataSet As DataSet, ByVal dataTable As DataTable)
If dataSet.Tables.Contains(dataTable.TableName) Then
dataSet.Tables.Remove(dataTable.TableName)
End If
dataSet.Tables.Add(dataTable)
End Sub
End Module然后你的代码会变成:
XMLDataSet.Replace(CabinetTable)
XMLDataSet.Replace(DocTypeTable)
XMLDataSet.Replace(IndexTable)
'...发布于 2014-06-13 19:44:09
更少的代码?(使用For Each循环调用您的方法)
For Each t in XMLDataSet.Tables
addRemoveDataTable(XMLDataSet,t)
Next..。
Private addRemoveDataTableSub(ByRef ds As DataSet, ByVal dt As DataTable)
If ds.Tables.Contains(dt.TableName) Then
ds.Tables.Remove(dt.TableName)
End If
ds.Tables.Add(dt)
End Subhttps://stackoverflow.com/questions/24212658
复制相似问题