只需要去查看一下他的源码就知道了,
Clone只是复制表结构
public virtual DataTable Clone() { return this.Clone(null); } |
再看看Copy方法源码,你应该懂了
public DataTable Copy() { DataTable table2; IntPtr ptr; Bid.ScopeEnter(out ptr, "<ds.DataTable.Copy|API> %d#\n", this.ObjectID); try { DataTable table = this.Clone(); foreach (DataRow row in this.Rows) { this.CopyRow(table, row); } table2 = table; } finally { Bid.ScopeLeave(ref ptr); } return table2; } |
1.Clone(null)这是调用了内部定义的Clone(DataSet ds)方法,然后这个Clone(DataSet ds)方法又调用了内部定义的一个CloneTo()方法。这个CloneTo方法内部定义了个DataTable,然后将所有的表属性复制给这个DataTable,再返回,这相当于重新建了一个表 2.同理Copy方法,建一个闲的DataTable对象,先调用了Clone实现了表结构复制,再调用CopyRow方法循环插入每一行。 3.Copy只是复制一份,Clone是复制一个结构,select出来的是列的引用
MSDN的解释
Copy 和 Clone 方法创建的新 DataTable 都与原始 DataTable 具有相同的结构。 Copy 方法创建的新DataTable 与原始表具有相同的 DataRows 集,但 Clone 方法创建的新 DataTable 不包含任何DataRows。