DataTable.Clone() 的问题

在C#程序中,遇到DataTable.Clone()方法导致返回结果不预期的问题。原本期望Clone()实现深拷贝,但实际上,对克隆后的DataTable修改并未影响源表。文中探讨了C#中的浅拷贝和深拷贝概念,指出DataTable.Clone()实为深拷贝,但某些情况下可能不按预期工作。
摘要由CSDN通过智能技术生成

最近在写程序的时候,碰到了一个 DataTable.Clone() 的问题,描述如下:

程序中,需要传入一个DataTable,并且,希望返回该表中一些修改好的数据行,程序代码如下:

public DataTable ChangeTable(DataTable dtSoc,DataTable dtTemp)

{

dtTemp=dtSoc.Clone();

foreach(DataRow row in dtSco.Rows)

{

if(row["Name"]=="mingzi")

{

row["Adress"]="111";

dtTemp.importRow(row);//这个函数忘记叫么子了

}

}

return dtTemp;

}

本以为该函数能够正确的返回修改的值,实际上,返回的结果好像是null,然后,自己对DataTable的类型有点疑惑,呵呵,因为参数传的是DataTable,是一个引用类型,函数里面,对它的任一修改,都回返回。实际上,由于程序里面有了DataTable.Clone()这个方法,使得结果不如自己希望的。

DataTable.Clone(),对象的拷贝,在c#里面,有浅拷贝和深拷贝的区别,浅拷贝,只拷贝对象的数据,对对象的修改,都将影响到原对象。深拷贝,会从新分配一个地址,保存一个对象,对新对象的修改,不会影响到原有程序。

 按照程序的结果,DataTable.Clone() 应该是深拷贝。

附上微软 该函数的方法:

 

internal  DataTable Clone(DataSet cloneDS)
{
    DataTable clone 
=  (DataTable) Activator.CreateInstance( base .GetType());
    
if  (clone.Columns.Count  >   0 )
    {
        clone.Reset();
    }
    
return   this .CloneTo(clone, cloneDS);
}

 

 
private  DataTable CloneTo(DataTable clone, DataSet cloneDS)
{
    clone.tableName 
=   this .tableName;
    clone.tableNamespace 
=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值