我最近在接受采访时被问到一个奇怪的问题;
Private Function sorttable (ByVal dt As DataTable, ByVal sorttype$, ByVal sort_direction$) As DataTable
Dim dv As DataView
Dim dt2 As DataTable
dt2 = dt.Clone
dt2.Merge(dt)
dv = dt2.DefaultView
dv.Sort = sorttype & " " & sort_direction
Return dv.ToTable()
End Function
这个功能正常工作,但是有一个问题(至少是面试官声称的)。好吧,我无法弄清楚它是什么。有什么想法吗?
答案 0 :(得分:1)
我从未使用DataView
或DataTable
,但代码不会处理这些对象。
答案 1 :(得分:1)
您无缘无故地创建了DataTable。
您可以使用此代码提供相同的结果
Private Function sorttable (ByVal dt As DataTable, ByVal sorttype$, ByVal sort_direction$) As DataTable
Dim dv As DataView
dv = dt.DefaultView
dv.Sort = sorttype & " " & sort_direction
Return dv.ToTable()
End Function
答案 2 :(得分:0)
编辑:仅合并复制方案,而不是行。这就是你需要它的原因。
我看到的只有两个问题是Merge
和冗余变量(dt2)。由于它们是按值传递的,因此没有理由制作额外的本地副本并为bug创建更多空间。这被称为代码气味。另外,为什么在刚刚创建已包含约束和模式的原始数据表的克隆时进行合并?这就像加倍。
答案 3 :(得分:0)
我正在创造这么好的答案,但我的FF已经崩溃......
所以很少说..
但是那里有什么
DataTable - 表示一个内存数据表。
克隆 - 克隆DataTable的结构,包括所有DataTable架构和约束。
合并(DataTable dataTable) - 此成员已重载。有关此成员的完整信息(包括语法,用法和示例),请单击重载列表中的名称。
DefaultView - 获取表格的自定义视图,该视图可能包含已过滤的视图或光标位置。
DataView - 表示DataTable的数据表,自定义视图,用于排序,过滤,搜索,编辑和导航。
你在中期的冗余被认为是一个好的答案,在某些情况下可以是合理的,例如我们只想要那些数据的分类副本用于其他目的。但是没有必要克隆然后合并,成员Copy也会这样做。
我不是专家,但属性Sort of DataView在返回DataTable时对DataView进行排序,因此我们不对任何内容进行排序。