我所拥有的是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
我认为我可以做一个sub来做这个,比如:
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调用它,所以我不认为它更有效率。
我完全忘记了对数据表使用paramarray ......
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循环的每次迭代都只是调用了第一个选项中的一个集合,所以我仍然无法看到效率的大幅提升。但是这个选项更容易阅读,而且更灵活。
答案 0 :(得分:2)
少代码? (使用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 Sub
答案 1 :(得分:2)
根据您对扩展方法的看法,您可以向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)
'...